1

这个片段:

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)
4

1 回答 1

1

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

您描述的问题如下:您的“a25$names”变量中没有“Bob”,但是当您使用时table,“Bob”出现了。这是因为原始列中存在的级别已被保留。

table(a25$names)
# 
#   Alice     Bob Charlie 
#       1       0       1 

幸运的是,有一个函数droplevels可以处理这样的情况:

table(droplevels(a25$names))
# 
#   Alice Charlie 
#       1       1 

droplevels功能也可以在 a 上工作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.characterand factor

table(as.character(a25$names))
table(factor(a25$names))
于 2014-07-10T17:21:44.880 回答