有个小伙伴问到了这样一个问题:
对于数据集中的观测值 A,如果数据集中能找到一个和 A 的 id 相同,class 相同的观测值 B,且 A 的 year 减 B 的 year 的差值大于 0 小于 5,则将 A 标记为 1;如果找不到这样的观测值 B,则将 A 标记为 0。
她还提供了一个示例数据:
library(tidyverse) |
我们再生成一个 ID 变量以更好的区分各个观测值:
df %>% |
为了进行跨行比较,我们需要生成一个交叉数据集:
df %>% |
由于筛选条件里面有对年份差值的比较,所以我们再生成一个 yeardiff 变量:
df %>% |
这样我们就可以筛选出符合要求的观测值了:
df %>% |
然后我们再把结果和最初的 df 连接起来就可以了:
df %>% |
这样我们就解决了这个问题。
另外我还把这个问题问了 chatGPT,它给出了这样的答案:
可以使用 dplyr 和 tidyr 包中的函数实现:
# 非正确代码 |
看起来它对这个问题理解有误,给出了一个错误的答案。不过这也提示我们可以分组处理:
df %>% |
这样也可以解决这个问题。
点击这里跳转到 RStata 短书平台获取附件:R 语言中如何进行跨行观测值比较?
评论