此片段:
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)
答案 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.character
和factor
:
table(as.character(a25$names))
table(factor(a25$names))