我希望根据应用于给定数值引用列的阈值对数据框的行进行分类。如果引用列的值低于阈值,则结果为0,我希望将其添加到新列。如果引用列的值高于阈值,则新列将在所有具有超过阈值的值的连续行中具有值1,直到出现新的0结果。如果新的参考值超过阈值,则要添加的值为2,依此类推。
如果我们设置阈值〉2,则我想要获得的示例是:
| 行|参考文献|结果|
| - ------|- ------|- ------|
| 1个|第二章|无|
| 第二章|1个|无|
| 三个|四个|1个|
| 四个|三个|1个|
| 五个|1个|无|
| 六个|六个|第二章|
| 七|八个|第二章|
| 八个|四个|第二章|
| 九|1个|无|
| 十个|三个|三个|
| 十一|六个|三个|
row <- c(1:11)
reference <- c(2,1,4,3,1,6,8,4,1,3,6)
result <- c(0,0,1,1,0,2,2,2,0,3,3)
table <- cbind(row, reference, result)
谢谢大家!
2条答案
按热度按时间jfewjypa1#
我们可以使用游程编码(rle)来实现。
以下假设为
data.frame
:数据类型
bgtovc5b2#
正如@Sotos的评论中所指出的,将考虑为您的对象使用替代名称。
由于不清楚是data.frame还是matrix,假设我们有一个基于您的数据的data.frame
df
:并且具有阈值2:
您可以通过@flodel修改this solution:
在这种情况下,
diff(x)
将包括一个向量,其中值1指示result应增加cumsum
的位置(在示例数据中,这发生在第3、6和10行)。这些是从FALSE到TRUE的转换(0到1),其中reference
从threshold
之下到threshold
之上。注意,由于diff
值的长度将短1个元素,因此添加/组合x[1]
。使用
ifelse
时,这些新的增量值仅适用于reference
超过threshold
的值,否则设置为0。