【问题标题】:Select only rows if its value in a particular column is less than the value in the other column如果特定列中的值小于另一列中的值,则仅选择行
【发布时间】:2011-02-20 17:29:55
【问题描述】:

我正在使用 R 并且需要选择年龄(死亡年龄)小于或等于 laclen(哺乳期长度)的行。我正在尝试创建一个新的数据框以仅包含行/ID,其中列'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

任何帮助将不胜感激!

巴松

【问题讨论】:

  • 请详细说明您的需求。
  • 嗨 Karthik,我正在尝试创建一个新的数据框以仅包含行/ID,其中列'aged' 的值小于列'laclength' 的值

标签: select r rows


【解决方案1】:
df[df$aged <= df$laclen, ] 

应该做的伎俩。方括号允许您根据逻辑表达式进行索引。

【讨论】:

  • 谢谢,aL3xa!我也会保留这个。我可以看到它与之前发送的 wkmor1 非常相似。
  • @aL3xa attach 没有detach 可能很危险......而且我认为逗号放错了位置。
  • @Marek,感谢您的建议!我添加了detach 并在右括号后放置了逗号,所以它是这样的:attach(df); newdf &lt;- df[which(aged &lt;= laclen), ]; detach(df)
  • @aL3xa 你也可以使用with - newdf &lt;- df[with(df,which(aged &lt;= laclen)), ] 而不是attach/detach
  • 我收到错误:Error in Ops.factor(value, productcode) : level sets of factors are different,必须在这些字段上设置级别:stackoverflow.com/questions/24594981/…
【解决方案2】:

你也可以这样做

subset(df, aged <= laclen)

【讨论】:

  • 不错,根据我的说法使代码更整洁,可惜R CMD check 没有将测试中使用的字段识别为合法变量。它发出NOTE“全局变量没有可见绑定”。
  • subset() 有一些严重的问题,参见例如stackoverflow.com/questions/9860090/…
【解决方案3】:

如果你使用dplyr 包,你可以这样做:

library(dplyr)
filter(df, aged <= laclen)

【讨论】:

    猜你喜欢
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多