2011-06-16 51 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