我想提取现有数据集的一组行:
dataset.x <- dataset[(as.character(dataset$type))=="x",]
然而,当我跑
时 summary(dataset.x$type)
显示原始数据集中存在的所有类型。基本上我得到的结果是
x 12354235 #the correct itemcount
y 0
z 0
a 0
...
0元素的存在不仅难看,而且由于存在值为0的条目,因此它也会混淆数据集x的任何图。
答案 0 :(得分:3)
我认为这是一个因素?如果是,则可以使用droplevels()
:http://stat.ethz.ch/R-manual/R-patched/library/base/html/droplevels.html
如果你添加一个可重复的小例子,它会帮助其他人进入同一页面并提供更好的建议,如果这是不对的。
答案 1 :(得分:3)
在Chase的回答的基础上,对因子中未使用的级别进行子集化和删除会产生很大的影响,因此通过组合droplevels
和subset
来创建自己的函数是值得的:
subsetDrop <- function(...){droplevels(subset(...))}
答案 2 :(得分:3)
其他人已经解释了正在发生的事情以及如何解决这个问题,我只是想说明为什么它是一个理想的默认值。
请考虑以下示例代码:
mydata <- data.frame(
x = factor( rep( c(0:5,0:5), c(0,5,10,20,10,5,5,10,20,10,5,0))),
sex = rep( c('F','M'), each=50 ) )
mydata.males <- mydata[ mydata$sex=='M', ]
mydata.males.dropped <- droplevels(mydata.males)
mydata.females <- mydata[ mydata$sex=='F', ]
mydata.females.dropped <- droplevels(mydata.females)
par(mfcol=c(2,2))
barplot(table(mydata.males$x), main='Male', sub='Default')
barplot(table(mydata.females$x), main='Female', sub='Default')
barplot(table(mydata.males.dropped$x), main='Male', sub='Drop')
barplot(table(mydata.females.dropped$x), main='Female', sub='Drop')
产生这个情节:
现在,哪个是更有意义的比较,左边的2个情节?或者右边的2个地块?
不要丢弃未使用的级别,而是重新考虑您正在做的事情可能更好。如果主要目标是获取x的计数,那么您可以使用sum
而不是子集和获取摘要。一个情节对你已经被迫成为单个值的变量有多大意义?
答案 3 :(得分:1)
尝试
数据集$ type&lt; - as.character(数据集$型)
后跟原始代码。可能只是R仍然将该列视为一个
factor
并在列中保留有关该因素的所有信息。