【发布时间】:2014-07-11 14:36:04
【问题描述】:
我想根据另一个数据帧中的值对一个数据帧进行子集化(这很容易)。最重要的是,我想告诉 R,如果第二个 df 中的值高于某个水平,那么子集应该包含第一个 df 中的所有值。 这是一口,所以这里有一个例子:
DF1 看起来像这样:
| date | value |
----------------------
| Jul 1 | 1 |
| Jul 2 | 2 |
| Jul 3 | 3 |
| Jul 4 | 4 |
为简单起见,假设 DF2 看起来像这样
value=99
df2<-data.frame(value)
再次,我想告诉 R,如果 df2 中的值大于 5,那么 df1 的子集应该包含值 1、2、3、4。
这是我正在尝试但不起作用的方法:
subset(df1, value %in% ifelse(df2$value[1]>5, c(1,2,3,4), df2$value[1]))
你能帮忙吗? 另外,如果您能解释为什么上述代码不起作用,请补充几点。
干杯!
【问题讨论】:
-
在你尝试的代码中,
values应该是value吗? -
是的,这是一个错字。刚刚修好了。不过,这不是问题的根源。
-
ifelse 中的另一个问题是:测试是(原子)逻辑(TRUE 或 FALSE),而(可能是预期的,但失败的)结果是长度为 4 的向量: ? ifelse: "ifelse(test, yes, no): Value: 一个与 test 长度和属性(包括维度和“类”)相同的向量”
-
感谢您的评论,@Martin。我知道 ifelse 部分是破坏链条的原因。你能建议如何让它工作吗?
-
我还是不明白这个计算的真正目的,但是这样做有用吗?我只是将 ifelse 扩展为 if ... else 构造并应用了一个临时变量: if(df2$value[1]>5) temp