R语言新手按条件对列累加累减生成新列报错如何解决
问题原因说明
你之前写的代码报错是因为mutate计算新列时,无法调用还在生成过程中的同名列,你代码中的D是正在生成的列,不能直接在计算逻辑里引用它本身的值。
最简解决方案
给你两种适合新手的实现方式,都可以直接跑出你要的结果:
方式1:基础R实现(无需安装额外包)
直接一行代码完成计算:
df$new_row <- cumsum(ifelse(df$b == "a", df$d, -df$d))
逻辑说明:
- 用
ifelse给每行的d值设置计算符号:b列等于"a"时取d本身,等于"b"时取负的d值 - 用
cumsum函数对处理后的值做累计求和,直接得到你要的new_row列
方式2:tidyverse/dplyr 实现(和你原来用的mutate语法一致)
如果已经安装了tidyverse包,用以下代码:
# 加载包 library(dplyr) # 计算新列 df <- df %>% mutate( new_row = cumsum(ifelse(b == "a", d, -d)) )
测试验证
你可以用你的示例数据直接运行测试,示例数据构造代码如下:
df <- data.frame( a = c(0,0,0,0), b = c("a","a","b","b"), c = c(1,2,3,4), d = c(100,300,150,250) )
运行上述计算代码后得到的df和你给出的预期结果完全一致。
内容的提问来源于stack exchange,提问作者Noob Programmer
相关产品推荐
相关产品推荐

