读取具有特定列值的行

时间:2011-06-16 18:43:55

标签: r

我想提取现有数据集的一组行:

 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的任何图。

4 个答案:

答案 0 :(得分:3)

我认为这是一个因素?如果是,则可以使用droplevels()http://stat.ethz.ch/R-manual/R-patched/library/base/html/droplevels.html

如果你添加一个可重复的小例子,它会帮助其他人进入同一页面并提供更好的建议,如果这是不对的。

答案 1 :(得分:3)

在Chase的回答的基础上,对因子中未使用的级别进行子集化和删除会产生很大的影响,因此通过组合droplevelssubset来创建自己的函数是值得的:

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

产生这个情节:

enter image description here

现在,哪个是更有意义的比较,左边的2个情节?或者右边的2个地块?

不要丢弃未使用的级别,而是重新考虑您正在做的事情可能更好。如果主要目标是获取x的计数,那么您可以使用sum而不是子集和获取摘要。一个情节对你已经被迫成为单个值的变量有多大意义?

答案 3 :(得分:1)

尝试

  

数据集$ type&lt; -   as.character(数据集$型)

后跟原始代码。可能只是R仍然将该列视为一个 factor并在列中保留有关该因素的所有信息。