R语言dplyr生成新列报错:基于两列创建列C时长度不匹配
解决分组后生成下一行值列的报错问题
嘿,我来帮你搞定这个问题!你遇到的报错其实很好理解:当你用B[-1]时,每个分组里这个向量的长度比原分组少了1(相当于砍掉了第一个元素),但dplyr的mutate要求新生成的列必须和原分组的行数完全一致,所以就触发了长度不匹配的错误。
正确的解决方案:使用lead()函数
dplyr里专门有个lead()函数就是干这个的——它能帮你取到同一分组里下一行的数值,最后一行没有后续值时,还能指定默认填充值(比如你要的0或者null/NA)。
直接上代码:
library(dplyr) ab <- ab %>% group_by(A) %>% mutate(C = lead(B, default = 0)) # 这里default可以换成NA,按需选择
举个实际例子
假设你的原始数据是这样的:
| A | B |
|---|---|
| 1 | 20170101 |
| 1 | 20170211 |
| 1 | 20170305 |
| 2 | 20170115 |
| 2 | 20170220 |
运行上面的代码后,生成的C列就会是你想要的结果:
| A | B | C |
|---|---|---|
| 1 | 20170101 | 20170211 |
| 1 | 20170211 | 20170305 |
| 1 | 20170305 | 0 |
| 2 | 20170115 | 20170220 |
| 2 | 20170220 | 0 |
这样就完美实现了你要的“C列对应B列从第二个日期开始的后续值,最后一个值设为0”的需求啦!
内容的提问来源于stack exchange,提问作者Kapil yadav
相关产品推荐
相关产品推荐

