过滤R中的数据帧和不需要的过滤结果
这个片段:过滤R中的数据帧和不需要的过滤结果,r,filter,dataframe,subset,R,Filter,Dataframe,Subset,这个片段: names<-c("Alice","Bob","Charlie") ages<-c(25,24,25) friends<-data.frame(names,ages) a25 <- friends[friends$age==25,] a25 table(a25$names) 既然数据帧a25不包含“Bob”,为什么输出中会出现“Bob”?我希望有这样的输出(来自表命令): 我错过了什么 我的环境: R version 2.15.2 (2012-10-26)
names<-c("Alice","Bob","Charlie")
ages<-c(25,24,25)
friends<-data.frame(names,ages)
a25 <- friends[friends$age==25,]
a25
table(a25$names)
既然数据帧a25
不包含“Bob”,为什么输出中会出现“Bob”?我希望有这样的输出(来自表
命令):
我错过了什么
我的环境:
R version 2.15.2 (2012-10-26)
Platform: i386-w64-mingw32/i386 (32-bit)
这个问题在评论中似乎有答案。这个答案分享了一个额外的方法,并整合了评论中的建议 您描述的问题如下:“a25$names”变量中没有“Bob”,但当您使用
表时,会显示“Bob”。这是因为原始列中的标高已保留
table(a25$names)
#
# Alice Bob Charlie
# 1 0 1
幸运的是,有一个名为droplevels
的函数可以处理如下情况:
table(droplevels(a25$names))
#
# Alice Charlie
# 1 1
droplevels
功能也可以在data.frame
上工作,允许您执行以下操作:
a25alt <- droplevels(friends[friends$ages==25,])
a25alt
# names ages
# 1 Alice 25
# 3 Charlie 25
table(a25alt$names)
#
# Alice Charlie
# 1 1
这个问题在评论中似乎有答案。这个答案分享了一个额外的方法,并整合了评论中的建议
您描述的问题如下:“a25$names”变量中没有“Bob”,但当您使用表时,会显示“Bob”。这是因为原始列中的标高已保留
table(a25$names)
#
# Alice Bob Charlie
# 1 0 1
幸运的是,有一个名为droplevels
的函数可以处理如下情况:
table(droplevels(a25$names))
#
# Alice Charlie
# 1 1
droplevels
功能也可以在data.frame
上工作,允许您执行以下操作:
a25alt <- droplevels(friends[friends$ages==25,])
a25alt
# names ages
# 1 Alice 25
# 3 Charlie 25
table(a25alt$names)
#
# Alice Charlie
# 1 1
您的名称
变量已转换为因子。而表
显示了因子的每一级的计数,即使它们的计数为0。@juba谢谢,所以当我创建a25
变量时,它是否“继承”了三级因子?a25
不是一个变量,它是一个数据框,是friends
的子集。所以它继承了friends
的age
因子及其所有级别,是的。@juba好的,我理解。有可能得到我期望的结果吗?您可以尝试25$age您的names
变量已转换为因子。而表
显示了因子的每一级的计数,即使它们的计数为0。@juba谢谢,所以当我创建a25
变量时,它是否“继承”了三级因子?a25
不是一个变量,它是一个数据框,是friends
的子集。所以它继承了friends
的age
因子及其所有级别,是的。@juba好的,我理解。有可能得到我期望的结果吗?您可以尝试25$age