如何用dplyr生成首行值为14的累加变量var2?
解决R语言dplyr生成var2列的首行值不符合预期问题
你的问题核心是首行需要单独赋值14,其余行取首行var值与当前行var值之和,而当前代码中first(var) + var会对所有行执行加法,首行自然得到14+14=28,不符合需求。
可以用dplyr的case_when()函数实现条件赋值,针对首行(或obs=="a"的行)单独设置值,其余行执行加法逻辑:
library(dplyr) data_a <- read.csv(text = " obs,var a, 14 b, 124 c, 180 d, 40 e, 20 ") data_b <- data_a %>% mutate(var2 = case_when( row_number() == 1 ~ 14, # 定位首行赋值14 TRUE ~ first(var) + var # 其余行执行首行var加当前var )) # 若obs列的"a"固定对应首行,也可以用obs判断: # data_b <- data_a %>% # mutate(var2 = case_when( # obs == "a" ~ 14, # TRUE ~ first(var) + var # ))
运行后得到的data_b结果如下:
obs var var2 1 a 14 14 2 b 124 138 3 c 180 194 4 d 40 54 5 e 20 34
完全符合期望:首行var2为14,其余行是首行var(14)与当前行var的和。
内容的提问来源于stack exchange,提问作者Giuseppe Petri
相关产品推荐
相关产品推荐

