- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想循环遍历大型数据框中的一长列列,并计算列滞后值的累积和。换句话说,我在计算每次观察之前“完成”了多少工作。
玩具数据框有助于使这一点更清晰。
id = c("a", "a", "a", "b", "b")
date = seq(as.Date("2015-12-01"), as.Date("2015-12-05"), by="days")
v1 = sample(seq(1, 20), 5)
v2 = sample(seq(1, 20), 5)
df = data.frame(id, date, v1, v2)
我希望它看起来像
id date v1 v2 v1Cum v2Cum
a 2015-12-01 1 13 0 0
a 2015-12-02 7 11 1 13
a 2015-12-03 12 2 8 24
b 2015-12-04 18 6 0 0
b 2015-12-05 4 9 18 6
所以它不是 id 组内 v1 或 v2 的累积和,而是每个 id 滞后值的累积和。
我可以在各个列上执行此操作,没有问题,但我似乎无法用循环来概括它:
vars = c("v1", "v2")
for (var in vars) {
lagname = paste(var, "Lag", sep="")
cumname = paste(var, "Cum", sep="")
df = arrange(df, id, date)
df = df %>%
group_by(id) %>%
mutate(!!lagname := dplyr::lag(var, n = 1, default = NA))
df[[lagname]] = ifelse(is.na(df[[lagname]]), 0, df[[lagname]])
df = df %>% group_by(id) %>% arrange(date) %>% mutate(!!cumname := cumsum(!!lagname))
}
据我所知,问题是
有什么想法吗?谢谢您的帮助! (在休息几年后,我试图重新开始编码。然而,我的主要“语言”是 Stata,所以我想我在这方面的做法有点奇怪。很高兴能完全修改它!)
最佳答案
如果我理解正确,以下内容应该有效:
可重现的样本数据(有 3 个变量用于求和):
set.seed(123)
df = data.frame(
id = c("a", "a", "a", "b", "b"),
date = seq(as.Date("2015-12-01"), as.Date("2015-12-05"), by="days"),
v1 = sample(seq(1, 20), 5),
v2 = sample(seq(1, 20), 5),
v3 = sample(seq(1, 20), 5)
)
> df
id date v1 v2 v3
1 a 2015-12-01 6 1 20
2 a 2015-12-02 15 11 9
3 a 2015-12-03 8 17 13
4 b 2015-12-04 16 10 10
5 b 2015-12-05 17 8 2
按 ID 分组,按日期排序(如果它们不按顺序排列),并对两个命名变量之间的所有命名变量进行变异(在本例中为 v1:v3
):
df %>%
group_by(id) %>%
arrange(date) %>%
mutate_at(vars(v1:v3), funs(Cum = cumsum(lag(., default = 0)))) %>%
ungroup()
# A tibble: 5 x 8
# Groups: id [2]
id date v1 v2 v3 v1_Cum v2_Cum v3_Cum
<fctr> <date> <int> <int> <int> <int> <int> <int>
1 a 2015-12-01 6 1 20 0 0 0
2 a 2015-12-02 15 11 9 6 1 20
3 a 2015-12-03 8 17 13 21 12 29
4 b 2015-12-04 16 10 10 0 0 0
5 b 2015-12-05 17 8 2 16 10 10
关于R/dplyr : Using a loop to create lags and calculate cumulative sums based on column names,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50595177/
我想像以前使用 Tableau 软件一样使用功率查询进行运行总计。有没有人有想法,提前致谢! 最佳答案 为迟到的答案道歉 - 这个挑战已经困扰了我好几个月了。 论坛和博客上很少有解决方案,但它们似乎都
我有数据 dat <- data.frame(t=1:100,y=rnorm(100),x1=rnorm(100)),x2=rnorm(100)) 其中 t 给出时间点。我想根据前面的时间点在每个时
是否有内置的 pandas 方法来查找两个 pandas 系列之间的累积相关性? 它应该做的是有效地修复 pandas.rolling_corr(data, window) 中窗口的左侧,以便窗口的宽
我有一个连接到 Google Data Studio 的 MySQL 数据库,其中包含“日期”和“新用户”列。 “新用户”列显示每天的新用户数。 我想绘制一张相对于日期的累计用户数的图表。这在电子表格
假设我有一个Java IntStream,是否可以将其转换为具有累积和的IntStream?例如,以 [4, 2, 6, ...] 开头的流应转换为 [4, 6, 12, ...]。 更一般地说,应该
我有一个这样的数组: [30, 10, 4, 3, 3] 我需要将其转换为一个 cumulative% 数组,每个值都是到那里的所有值的总和除以数组中所有值的总和。 在本例中,总数为 50。因此,第一
假设我有一个 Java IntStream,是否可以将其转换为具有累积和的 IntStream?例如,以 [4, 2, 6, ...] 开头的流应转换为 [4, 6, 12, ...]。 更一般地说,
我有一个数据框如下。按time列排序。 输入 - df = data.frame(time = 1:20, grp = sort(rep(1:5,4)),
我是 R 的新手。我不确定如何在 R 中执行以下功能。我可以在 excel 中执行此操作。但无法在 R 中完成。有人可以帮助我吗? 我想得到计数器值达到64后的累加和, 以下是我的数据, x 57 5
我的目标是按日期累计注册用户数 这是我的mysql sql SELECT MONTH( DATE ) AS `month`, COUNT(userid) FROM `stats` WHERE `u
我有一个按月-年字符串属性排序的对象列表。我的对象类定义看起来像 Public class Obj{ String year; Long membercount; Long n
我有一个像这样的向量 v <- c(76, 31, 33, 7) 并且需要计算其导致的“累积差” cumdiff <- c(45, 12, 5) 这是 76 - 31 = 45 和 45 - 33 =
假设我有一个奖项的 SQL 表,其中包含日期和金额字段。我需要生成一个表格,其中包含一系列连续日期、每天奖励的金额以及运行(累计)总数。 Date Amount_Total Amo
我们有如下数据框: +------+--------------------+ | Flag | value| +------+--------------------+
我正在计算“第一”位置总计列(下表)的值,并希望使用多个条件来执行此操作。 我希望总“第一”位置能够反射(reflect)特定运动员赢得比赛的次数(截至特定日期)。 例如...见下文,当运动员 = S
我正在计算“第一”位置总计列(下表)的值,并希望使用多个条件来执行此操作。 我希望总“第一”位置能够反射(reflect)特定运动员赢得比赛的次数(截至特定日期)。 例如...见下文,当运动员 = S
我有像这样的一系列累积值: 1821, 2015-01-26 22:14:42+02:00, 24574.7 1822, 2015-01-26 22:15:05+02:00, 24574.7 1823
我试图在二叉索引树 (BIT) 中找到具有给定累积频率的索引。 我能够在 O(log(n)*log(n)) 中解决这个问题,方法是借助二分搜索和计算任何索引处的累积频率的函数来实现它。 但我想在 O(
我是 Python Pandas 的新手,因此无法找到与许多普通 SQL 操作等效的句法。给定玩具场景: id rank ts alive 1 1 201
我想提高我的谷歌页面速度结果。我发现我的主要问题之一是 Cumulative Layout Shift。我意识到这个问题是由 cookie 和促销弹出窗口引起的。 您有任何解决此 google 页面速
我是一名优秀的程序员,十分优秀!