2011-06-16 55 views
0

我想提取一组现有数据集的行:读行与特定列值

dataset.x <- dataset[(as.character(dataset$type))=="x",] 

但是当我运行

summary(dataset.x$type) 

它显示其存在于原所有类型数据集。基本上,我得到的结果,说

x 12354235 #the correct itemcount 
    y 0 
    z 0 
    a 0 
    ... 

不仅是0元素的存在丑陋,但它也dataset.x的任何图谋搞乱由于条目hundrets的存在与价值0.1

+0

照顾提供一个可重复的例子,以避免从外面猜测? – 2011-06-16 18:52:09

回答

3

大厦大通的回答,子集和因素下探未使用的水平上来了很多,所以它支付结合droplevelssubset刚刚创建自己的功能:

subsetDrop <- function(...){droplevels(subset(...))} 
+0

如果你经常使用这个函数,这可能是你想要一个字符向量的符号,而不是一个因素。 – hadley 2011-06-18 04:02:53

+0

@hadley - 的确,我主要生活在stringsAsFactors = FALSE。然而,当我绘制它们时,我碰巧经常希望事物不按字母顺序排列,而不拖动所有层次。 – joran 2011-06-18 04:29:53

+1

我希望有一个数据类型保存顺序,但不保存级别。 – hadley 2011-06-18 12:54:17

3

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

如果添加一个可重复使用的小例子,它将帮助其他人访问同一页面,并在不正确的情况下给出更好的建议。

+0

我认为你不需要'gdata'了。最近增加了'droplevels',不确定哪个版本。 – joran 2011-06-16 18:53:34

+0

@joran你是对的,没有意识到这一点。谢谢! – Chase 2011-06-16 18:54:57

+0

@joran 2.12,methinks。 – 2011-06-16 19:21:24

1

尝试

数据集$型< - as.character(数据集$型)

之后原密码。这可能只是R仍然将该列作为 factor并将该因素的所有信息保留在列中。

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而不是子集并获取摘要。一个情节对你已经被迫成为单一价值的变量有多有意义?

+0

感谢格雷格 - 一个很好的提醒我们所有人。 – Aaron 2011-06-19 20:24:24