r - 如何创建循环以在 df - R 中添加新列
问题描述
我需要你的帮助。我有一个包含日期和值的数据框,如下所示:
Id Date1 Date2 Value
1 01/01/18 01/03/18 1.000
2 01/05/18 01/07/18 500
3 01/03/18 01/06/18 17.000
4 01/12/18 01/01/19 670
5 01/10/18 01/12/18 9.600
我需要创建一个 for 循环,以便为 i = (0, 60, 90, 180, 270, 360) 添加新列到数据框,所以 -> 如果 RifDate(是一个常量日期) - Date1 > i & RifDate - 日期2
因此,我希望获得六个新列,其中包含 0 或行中的值
解决方案
根据您的“RifDate”,您可能会得到不同的结果:
df <- as.data.frame(
read.table(text =
"Id Date1 Date2 Value
1 01/01/18 01/03/18 1.000
2 01/05/18 01/07/18 500
3 01/03/18 01/06/18 17.000
4 01/12/18 01/01/19 670
5 01/10/18 01/12/18 9.600",header=TRUE)
) %>%mutate_at(2:3, function(x) as.Date(as.character(x), "%m/%d/%y"))
RefDate <- as.Date("01/04/18", "%m/%d/%y")
ref <- c(0, 60, 90, 180, 270, 360)
dat <- NULL
for (i in 1:length(ref)) {
for (j in 1:nrow(df)) {
if ((RefDate - df$Date1[j] > ref[i]) & (RefDate - df$Date1[j] > RefDate - df$Date2[j])) {
dat[j] <- df$Value[j]
} else
dat[j] <- 0
}
df[,paste0("X", i)] <- dat
}
df
Id Date1 Date2 Value X1 X2 X3 X4 X5 X6
1 1 2018-01-01 2018-01-03 1.0 1 0 0 0 0 0
2 2 2018-01-05 2018-01-07 500.0 0 0 0 0 0 0
3 3 2018-01-03 2018-01-06 17.0 17 0 0 0 0 0
4 4 2018-01-12 2019-01-01 670.0 0 0 0 0 0 0
5 5 2018-01-10 2018-01-12 9.6 0 0 0 0 0 0
推荐阅读
- filepond - 防止相同的文件/照片选择
- vba - VBA 合并分隔数组中的重复值
- javascript - 在 ---> 中找到“TypeError:无法读取 null 的属性‘长度’”
在 src/views/blogPage/blogpage.vue - javascript - 如何减少 Firebase 捆绑包的大小?
- javascript - 使用 ng-bind-html 嵌套 ng-repeat
- jquery - 在元素调整大小上切换 css 类会让人感到不安
- google-maps - 距离矩阵 API 返回错误信息
- office-js - Office 对话窗口在 IE11 上无法打开
- python - 如何将本地 PyCharm 连接到服务器上安装的 python?这甚至可能吗?
- sql-server - 此语句中的数字是什么意思: DATEDIFF(wk, 6, '2020-01-03');