R中使用dplyr创建非空Input标记分组变量计算组内差值的问题
R实现分组标记与组内差值计算的解决方案
生成第一个目标变量(Variable wanted 1)
你需要的分组标记可以通过cumsum累加非空判断结果实现,且要保证每个Group的计数独立,代码如下:
library(dplyr) df <- df %>% group_by(Group) %>% mutate(`variable wanted 1` = cumsum(!is.na(Input))) %>% ungroup()
逻辑说明:!is.na(Input)会在Input为非空值时返回TRUE(等价数值1),空值时返回FALSE(等价数值0),累加后每遇到非空Input就会自动+1生成新的分组编号。
生成第二个目标变量(Variable 2)
你原代码的问题有两处:一是带空格的变量名需要用反引号包裹,二是diff需要直接针对Output列计算,修正后的完整代码如下:
df_final <- df %>% group_by(Group, `variable wanted 1`) %>% # 若需要组内第一行差值为NA,可去掉default参数 mutate(variable2 = Output - lag(Output, default = first(Output))) %>% ungroup()
运行结果验证
生成的最终数据结构如下:
# A tibble: 14 × 5 Group Output Input `variable wanted 1` variable2 <dbl> <dbl> <chr> <int> <dbl> 1 1 2 NA 0 0 2 1 3 a 1 0 3 1 4 NA 1 1 4 1 5 b 2 0 5 2 3 NA 0 0 6 2 4 a 1 0 7 2 6 NA 1 2 8 2 7 b 2 0 9 2 9 NA 2 2 10 2 10 c 3 0 11 3 1 NA 0 0 12 3 4 a 1 0 13 3 6 NA 1 2 14 3 8 b 2 0
内容的提问来源于stack exchange,提问作者mikermike
相关产品推荐
相关产品推荐

