r - 遍历 R 中的列组内的数据帧的行
问题描述
我有一个包含 6 个字段 A、B、C、D、E 和 F 的数据框 df。我的要求是创建一个新列 G,它等于前一个值(C)+ 前一个值(D)+ 前一个(G) - F. 但这需要通过列 A 和 B(按 A 和 B 分组)在组级别实现。如果它是组内的第一行,则 G 列中的值应等于 E。
样品 Df -
A B C D E F
1 2 100 200 300 0
1 2 110 210 310 10
1 2 120 130 300 10
1 1 140 150 80 0
1 1 50 60 80 20
1 1 50 60 80 20
输出 -
A B C D E F G
1 2 100 200 300 0 300
1 2 110 210 310 10 590
1 2 120 130 300 10 900
1 1 140 150 80 0 80
1 1 50 60 80 20 350
1 1 50 60 80 20 440
请提供合适的解决方案。
解决方案
这是一个选项dplyr
,我们按“A”、“B”分组,取lag
“C”、“D”、“E +
”中的柱子
library(dplyr)
df1 %>%
group_by(A, B) %>%
mutate(G = coalesce(lag(C) + lag(D) + lag(E) - F, E))
-输出
# A tibble: 6 x 7
# Groups: A, B [2]
# A B C D E F G
# <int> <int> <int> <int> <int> <int> <int>
#1 1 2 100 200 300 0 300
#2 1 2 110 210 310 10 590
#3 1 2 120 130 300 10 620
#4 1 1 140 150 80 0 80
#5 1 1 50 60 80 20 350
#6 1 1 50 60 80 20 170
数据
df1 <- structure(list(A = c(1L, 1L, 1L, 1L, 1L, 1L), B = c(2L, 2L, 2L,
1L, 1L, 1L), C = c(100L, 110L, 120L, 140L, 50L, 50L), D = c(200L,
210L, 130L, 150L, 60L, 60L), E = c(300L, 310L, 300L, 80L, 80L,
80L), F = c(0L, 10L, 10L, 0L, 20L, 20L)), class = "data.frame",
row.names = c(NA,
-6L))
推荐阅读
- swiftui - 修改@State var时未调用onChange
- doctrine-orm - 需要 Doctrine 多对多 QueryBuilder 查询以返回不在公共行中
- google-bigquery - 将 GA4 项目链接到 bigquery - 流式传输与每日
- php - Wordpress 中主页和单个帖子的不同标题
- reactjs - 创建 React App 代理来表达 PassportJS 的服务器不工作
- react-native - 踢按钮时反应本机更改整数值
- javascript - “未捕获的 TypeError:非法调用”当我从 setTimeout 添加一个类时
- r - ggplot Violin Graphs 中的错误 - 无法用小提琴覆盖箱线图
- javascript - 如何在悬停和鼠标不移动时停止背景 gif,并在 JavaScript 中移动和悬停时恢复 gif?
- javascript - finally 块在 try 块结束之前执行