R - Как я могу добавить столбцы в фрейм данных / таблицу данных на основе значений вектора, который содержит последовательность дат

У меня есть вектор дат

 start_date    <- as.Date("1990-01-01", "%Y-%m-%d")
 end_date      <- as.Date("2021-01-31", "%Y-%m-%d")

 new_cols      <- seq(from = start_date, 
                    to = end_date,
                    by = "month")
 new_cols      <- as.yearmon(new_col, frac = 1)
 new_col_names <- as.character(new_cols)

У меня есть два других вектора, один вектор символов, который можно использовать при создании data.frame, и один целочисленный вектор.

ID.vec <- c(1:100)
type.vec <- c("A", "B", "C")

data.frame( rep(ID.vec, each = 3), type.vec, ?? )

Эти столбцы даты могут быть пустыми, поскольку я использую цикл for для заполнения таблицы.

Как я могу добавить все даты, определенные в последовательности, в виде столбцов в data.frame / data.table, чтобы ...

ID     TYPE    2000-03-31  2000-04-30  2000-05-31  2000-06-30 etc
1      A       sth         sth         sth         sth
1      B       sth         sth         sth         sth
1      C       sth         sth         sth         sth
2      A       sth         sth         sth         sth
2      B       sth         sth         sth         sth
2      C       sth         sth         sth         sth
3      A       sth         sth         sth         sth
3      B       sth         sth         sth         sth
3      C       sth         sth         sth         sth

person aimbotter21    schedule 14.02.2021    source источник


Ответы (2)


Вы можете создать столбцы для добавления, как показано ниже.

df <- data.frame(rep(ID.vec, each = 3), type.vec)

someInitialValue <- 0
toAdd <- setNames(data.frame(matrix(rep(someInitialValue,NROW(df)*length(new_col_names)), 
                                    ncol = length(new_col_names), 
                                    nrow = NROW(df))), 
                  new_col_names)

а затем привяжите их к своему data.frame через

newdf <- cbind(df,toAdd)
person Jonas    schedule 14.02.2021
comment
Новейший сам бы подумал об этом логическом обходном пути! Большое спасибо! - person aimbotter21; 14.02.2021

Мы также можем сделать это с помощью expand.grid

out <- expand.grid(ID.vec, type.vec)
out[new_cols] <- NA
person akrun    schedule 14.02.2021