r - 将 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 知识/谷歌搜索技能不再有帮助的案例。
我想学习两件事:
如何在特定时期内为变量赋值。例如,我想在 2021-04-01 和 2021-04-05 之间的时间段内为 rad 列中的所有元素赋予 42 的值。
更重要的是(与 1. 无关)我想创建一个代码:
- 根据“rad”变量创建一个新列
- 计算某个时间段(例如 2021-04-01 - 2021-04-05)的“rad”的累积和
- 然后取 cumsum 的最后一个值(累计求和期间的总和),并分配给某个时间段(例如 2021-04-06 - 2021-04-15)
- 对于未应用函数的其余日期,新变量具有与“rad”变量相同的值
如果您需要更好的解释,请告诉我。我根本不知道如何向您呈现所需的输出,因为如果我知道,那么我就不会在这里问了。先感谢您
最好的,佐林
解决方案
您可以使用布尔向量来指定要修改的行:
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
推荐阅读
- delphi - 将相互 SSL 与 HttpRIO 结合使用
- node.js - NGINX 太慢了
- elasticsearch - 远程主机使用 elasticsearch 强行关闭现有连接
- python - 在 Python OSMNX 上的给定地图上绘制路线
- docker - 使用环境变量从另一个 docker 容器访问本地 SQS 服务
- macos - 中断 python 输入的问题 (Mac)
- node.js - 使用 ffmpeg、hls-server 和 reactjs 重新流式传输 hls(m3u8)
- javascript - JS 或 .NET Core 中的 AD 身份验证?
- c++ - 成员函数中的二维数组显示错误
- android - Android NIO - 无法从 SocketChannel 读取大数据,错误:BUFFER_UNDERFLOW