2010-05-18 44 views
36

我正在使用R並需要選擇具有小於或等於laclen(哺乳期長度)的年齡(死亡年齡)的行。我正在嘗試創建一個新的數據框,以便只包含rows/id,其中column'aged的值小於其相應的'laclength'值。如果特定列中的值小於其他列中的值,則只選擇行

df: 
id1 id2 laclen aged 
9830 64526 26  6 
7609 64547 28  0 
9925 64551  3  0 
9922 64551  3  5 
9916 64551  3  8 
9917 64551  3  8 
9914 64551  3  2 

新的數據幀應該是這樣的:

dfnew: 
id1 id2 laclen aged 
9830 64526 26  6 
7609 64547 28  0 
9925 64551  3  0 
9914 64551  3  2 

任何幫助,將不勝感激!

Bazon

+0

請給你需要更多的細節。 – Karthik 2010-05-18 04:52:01

+0

沒有得到你 – 2010-05-18 05:05:23

+1

嗨Karthik, 我想創建一個新的數據框,以只包括rows'id'的值列'aged'的值小於列'laclength'的值 – Bazon 2010-05-18 05:34:25

回答

63
df[df$aged <= df$laclen, ] 

應該做的伎倆。方括號允許您基於邏輯表達式進行索引。

+0

謝謝,aL3xa!我也會保留這一個。我可以看到它與之前發送的一個wkmor1非常相似。 – Bazon 2010-05-18 06:02:41

+1

@ aL3xa'attach'沒有'detach'可能會很危險......我認爲這個逗號是錯誤的。 – Marek 2010-05-18 07:39:49

+1

@Marek,謝謝你的建議!我添加了'detach'並在右括號後面加逗號,所以它是這樣的:'attach(df); newdf < - df [which(age <= laclen),]; detach(df)' – aL3xa 2010-05-18 10:49:57

38

你也可以做

subset(df, aged <= laclen) 
+1

不錯,根據我的說法使代碼更整潔,可惜'R CMD check'無法識別測試中使用的字段作爲合法變量。它發出一個'NOTE'「全局變量沒有可見的綁定」。 – mariotomo 2010-05-18 14:10:34

+2

'subset()'有一些嚴重的問題,參見例如http://stackoverflow.com/questions/9860090/in-r-why-is-better-than-subset – MERose 2015-12-29 11:50:30

3

如果使用dplyr包,你可以這樣做:

library(dplyr) 
filter(df, aged <= laclen) 
相關問題