首页 > 解决方案 > 如何创建循环以在 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 或行中的值

标签: r

解决方案


根据您的“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

推荐阅读