2013-10-05 55 views
6

我有一個ID列和幾列值的數據框。我只想根據該行ID的值是否與另一組值(例如,稱爲「keep」)保持某些數據框的行。基於一組值保留數據幀的某些行

爲了簡單起見,這裏有一個例子:

df <- data.frame(ID = sample(rep(letters, each=3)), value = rnorm(n=26*3)) 
keep <- c("a", "d", "r", "x") 

如何創建由行,只有具有匹配保持該ID的新數據幀?通過使用which()函數,我可以只用一個字母來做到這一點,但對於多個字母,我會收到警告消息和不正確的退貨。我知道我可以通過數據框運行一個for循環並推斷,但我想知道是否有更優雅和有效的方法來解決這個問題。提前致謝。

+3

嘗試df [df $ ID%in%keep,]或子集(df,ID%在%keep中) - 請參閱http://stat.ethz.ch/R-manual/R-devel/library/base /html/sets.html – Adrian

+1

@Adrian => answer ... –

回答

17

嘗試df[df$ID %in% keep, ]subset(df, ID %in% keep) - 請參閱sets的幫助頁面。

編輯:此外,如果這是一個字母,你可以編寫例如df[df$ID == "a", ]而不是使用which()

+0

完美,非常感謝!我知道另一種推斷一個字母的方法,但是我一直在用R的歷史中使用'which()'方法,它看起來在語法上更漂亮(如果這有什麼意義的話......),所以我堅持下去 :) – user2849910