首页 > 解决方案 > 将 cumsum 函数应用于具有多个条件的变量

问题描述

我有与此类似的数据:

data <- data.frame (date=seq.Date(as.Date("2021-03-21"),as.Date("2021-04-21"),"day"),
                    rad= sample(1:10,32, replace = T))

> head(data)
        date rad
1 2021-03-21   1
2 2021-03-22   5
3 2021-03-23   1
4 2021-03-24   9
5 2021-03-25  10
6 2021-03-26   4
...

我目前正在学习扭曲和操作大型数据集,并偶然发现了我的 R 知识/谷歌搜索技能不再有帮助的案例。

我想学习两件事:

  1. 如何在特定时期内为变量赋值。例如,我想在 2021-04-01 和 2021-04-05 之间的时间段内为 rad 列中的所有元素赋予 42 的值。

  2. 更重要的是(与 1. 无关)我想创建一个代码:

如果您需要更好的解释,请告诉我。我根本不知道如何向您呈现所需的输出,因为如果我知道,那么我就不会在这里问了。先感谢您

最好的,佐林

标签: rdataframecumsum

解决方案


您可以使用布尔向量来指定要修改的行:

data <- data.frame(date=seq.Date(as.Date("2021-03-21"),as.Date("2021-04-21"),"day"),
                    rad= sample(1:10,32, replace = T))

# Specify rows to be modified
modified <- data$date>=as.Date('2021-04-01') & data$date<=as.Date('2021-04-05')
modified.after <- data$date>as.Date('2021-04-06') & data$date<=as.Date('2021-04-15')

# First question
# data$rad[modified] <- 42

# Second question
data$radnew <- data$rad
cs <- cumsum(data$rad[modified])

data$radnew[modified] <- cs
data$radnew[modified.after] <- tail(cs,1) 
data

推荐阅读