r - 按组求和 1:n
问题描述
有:我需要为每组中的每一行求和 i:n 的数据集
demo<-data.frame(th=c(c(0,24,26),(c(0,1,2,4))),hs=c(rep(220,3),c(rep(240,4))),
seq=(c(1:3,1:4)),group=c(rep(1,3),rep(2,4)))
看起来是这样的:
> demo
th hs seq group
1 0 220 1 1
2 24 220 2 1
3 26 220 3 1
4 0 240 1 2
5 1 240 2 2
6 2 240 3 2
7 4 240 4 2
需要一个基于 、 和 列的向量,hs
但seq
它th
是hs
列到列的总和,并将列seq
乘以.th
group
demo[1,"an"]<- demo[1,"hs"]^demo[1,"seq"] * demo[1,"th"]
demo[2,"an"]<-sum(demo[1,"hs"]^demo[1,"seq"] * demo[1,"th"],
demo[2,"hs"]^demo[2,"seq"] * demo[2,"th"] )
demo[3,"an"]<-sum(demo[1,"hs"]^demo[1,"seq"] * demo[1,"th"],
demo[2,"hs"]^demo[2,"seq"] * demo[2,"th"],
demo[3,"hs"]^demo[3,"seq"] * demo[3,"th"])
demo[6,"an"]<-sum(demo[4,"hs"]^demo[4,"seq"] * demo[4,"th"],
demo[5,"hs"]^demo[5,"seq"] * demo[5,"th"],
demo[6,"hs"]^demo[6,"seq"] * demo[6,"th"])
这是新列 ( an
) 的样子
> demo
th hs seq group an
1 0 220 1 1 0
2 24 220 2 1 1161600
3 26 220 3 1 278009600
4 0 240 1 2 NA
5 1 240 2 2 NA
6 2 240 3 2 27705600
7 4 240 4 2 NA
忽略此 MRE 中的 NA,这些也需要填写。
解决方案
图书馆
library(tidyverse)
样本数据
df <-
read.csv(
text =
"th hs seq group
0 220 1 1
24 220 2 1
26 220 3 1
0 240 1 2
1 240 2 2
2 240 3 2
4 240 4 2",
sep = " ",header = T
)
代码
df %>%
#Grouping by group
group_by(group) %>%
#Applying a cumulative sum of the formula, by group
mutate(an = cumsum(hs^seq*th))
输出
th hs seq group an
<int> <int> <int> <int> <dbl>
1 0 220 1 1 0
2 24 220 2 1 1161600
3 26 220 3 1 278009600
4 0 240 1 2 0
5 1 240 2 2 57600
6 2 240 3 2 27705600
7 4 240 4 2 13298745600
推荐阅读
- angular - 清除输入下方的输入字段已更改
- mysql - 返回中间字符串并计数
- c++ - 将位图设置为 CStatic 对象
- python - python:过滤具有特定值中匹配字符串的字典
- python - 如何在 Python 3D 图中订购 ax.scatter 和 ax.quiver?
- python - 从另一个数据帧更新熊猫数据帧
- vue.js - 通过 Vue 进行轮播(如何使用过渡?)
- kubernetes - 如何在 Kubernetes 中重用卷?
- c - 使用 realloc() 改变 malloc() 大小输出垃圾值(C语言)
- javascript - Keycloak javascript适配器调用受保护的rest api