Как создать цикл для добавления новых столбцов в DF - R - PullRequest
0 голосов
/ 10 июля 2019

Мне нужна твоя помощь. У меня есть датафрейм, содержащий даты и значения, как здесь:

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 - Date2

Таким образом, я ожидаю получить шесть новых столбцов, содержащих 0 или значение в строке

1 Ответ

0 голосов
/ 10 июля 2019

В зависимости от вашей «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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...