【问题标题】:Filter function that excludes values in column排除列中值的过滤函数
【发布时间】:2021-05-07 02:59:00
【问题描述】:

我试图通过仅选择小于 5001 的值,然后选择任何等于 6000 及以上的值来过滤数据框中的列

这就是我所拥有的,但它不起作用并且不确定为什么

METable <- subset(outputdata, outputdata$Store.No < 5001 | outputdata$Store.No > 5999)

我使用了上面的代码并参考了下面的答案,但出于某种奇怪的原因,它仍然不适合我。所以 Store.No 列中的 outputdata 数据框我只有商店 5035 ......这意味着 METable df 中不应该显示任何内容,但它仍然存在......这里有什么简单的我错过了

【问题讨论】:

  • 数字不能小于 5001 且大于 5999。用 and 运算符替换为 or 运算符:|
  • 您应该使用 OR 运算符“|”,而不是 AND 运算符“&”。此外,如果值是数字,则应使用不带引号的 (5001),而不是 ("5001")。
  • @LMc 我已经用新的代码行更新了我的问题,但仍然遇到问题
  • @GuedesBF 我已经用新的代码行更新了我的问题,但仍然遇到问题
  • 您确定列Store.No 是数字吗?在| 的两侧尝试as.numeric(outputdata$Store.No) &lt; 5001 | ...。请使用dput(head(outputdata)) 发布您的一些数据

标签: r dataframe filter conditional-statements subset


【解决方案1】:

您正在应用两个不可能匹配的条件。您是在告诉 Store.No 必须低于 5001 并同时优于 5999。如果您想要小于 5001 的所有内容和高于 6000 的所有内容,您必须这样做:

METable <- subset(outputdata, outputdata < 5001 | outputdata > 5999)

还要注意您应该比较数字(不带“”),因为这可能会出现意外行为,例如:

"2" > "11"  - Returns True

【讨论】:

  • 正如@GuedesBF 提到的那样,这没有意义。您不应该为此引用数字,因为您不想要字符行为,尽管它在某些情况下可能有效。
  • 是的,你绝对是对的,虽然在某些情况下比较可能有效,但它肯定会失败,这不是预期的行为。我已经编辑了我的答案以适应这种情况。
猜你喜欢
  • 1970-01-01
  • 2017-01-28
  • 2020-03-09
  • 2023-03-07
  • 2020-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
相关资源
最近更新 更多