r - 将值与数据框中的前 n 个值进行比较
问题描述
给定这样的数据框:
df <- data.frame(ID = seq(1,8), fruit = c("apple", "orange", "kiwi", "pear", "orange", "kiwi", "apple", "apple"))
ID fruit
1 1 apple
2 2 orange
3 3 kiwi
4 4 pear
5 5 orange
6 6 kiwi
7 7 apple
8 8 apple
如何创建一个新列来标识一个值是否出现在前n行中?例如,如果 n = 3,我想要这样的输出:
ID fruit previous_3
1 1 apple FALSE
2 2 orange FALSE
3 3 kiwi FALSE
4 4 pear FALSE
5 5 orange TRUE
6 6 kiwi TRUE
7 7 apple FALSE
8 8 apple TRUE
解决方案
带有shift
from的选项data.table
library(data.table)
f_prev_n <- function(dat, colnm, n) {
rowSums(sapply(data.table::shift(df[[colnm]], n = seq_len(n)),
function(x) dat[[colnm]] == x), na.rm = TRUE) > 0
}
df$previous_3 <- f_prev_n(df, 'fruit', 3)
df$previous_3
#[1] FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE
df$previous_6 <- f_prev_n(df, 'fruit', 6)
df$previous_6
#[1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE
推荐阅读
- python - 如何将另一个python文件中的函数调用到某个文件中
- reactjs - 无法更新子组件中的道具
- r - 计算多元线性回归的预测
- google-api - 谷歌课堂推送通知注册权限被拒绝仅限学生
- c# - httpclient调用c#中不支持的媒体类型
- xml - 用 powershell 将 '.00' 替换为 xml 中的空白值
- linux - 为什么内核模块 Makefile 不能识别目录中的任何文件?
- laravel - 我们如何将 Laravel Vue 组件升级到 Vue 3?
- python - 当整数变量在函数中被引用时,“UnboundLocalError:赋值前引用的局部变量‘计数’”
- java - 对 maven 3.12.0 很好,但是 3.13.0:pmd failed: MavenReportException: /workspace/my-project/.out/reports/pmd/pmd.xml (没有这样的文件或目录)