过滤R中的数据帧和不需要的滤出结果

时间:2013-05-21 08:27:56

标签: 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)

给我这个输出

    names ages
1   Alice   25
3 Charlie   25

  Alice     Bob Charlie 
      1       0       1

现在,为什么“Bob”在输出中,因为数据帧a25不包含“Bob”?我希望这样的输出(来自table命令):

  Alice  Charlie 
      1        1 

我错过了什么?

我的环境:

R version 2.15.2 (2012-10-26)
Platform: i386-w64-mingw32/i386 (32-bit)

1 个答案:

答案 0 :(得分:1)

这个问题似乎在评论中有答案。这个答案分享了另一种方法,并整合了评论中的建议。

您描述的问题如下:没有&#34; Bob&#34;在你的&#34; a25 $名字&#34;变量,但是当你使用table时,&#34; Bob&#34;出现。这是因为保留了原始列中的级别。

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 

如评论中所述,还请查看as.characterfactor

table(as.character(a25$names))
table(factor(a25$names))