#r #dataframe
#r #фрейм данных
Вопрос:
У меня есть 2 фрейма данных следующим образом:
df1
name date value df2_row df2_col
a 31-01-2019 1 1 1
b 31-01-2019 3 2 1
c 31-03-2019 5 3 3
d 31-03-2019 6 4 3
df2
name 31-01-2019 28-02-2019 31-03-2019
a
b
c
d
и я хотел бы получить df2 следующим образом:
df2
name 31-01-2019 28-02-2019 31-03-2019
a 1 NA NA
b 3 NA NA
c NA NA 5
d NA NA 6
Есть идеи?
Комментарии:
1. Каковы ваши идеи? Что вы пробовали? Пожалуйста, поделитесь кодом, который вы использовали и который не удался. Также убедитесь, что приведены воспроизводимые примеры и что ожидаемый результат соответствует этим примерам.
Ответ №1:
Похоже, что name
и date
в df1
не связаны с конечным результатом. Предполагая, что у вас есть один столбец ( name
) перед NA
столбцами, cbind
df2_row
и df2_col
и присваивать value
им.
df2[cbind(df1$df2_row, df1$df2_col)] <- df1$value
# 31-01-2019 28-02-2019 31-03-2019
#1 1 NA NA
#2 3 NA NA
#3 NA NA 5
#4 NA NA 6
данные
Предполагая, что ваш df2
такой
df2 <- cbind(name = c("a", "b", "c", "d"),
setNames(data.frame(matrix(NA, ncol = 3, nrow = 4)),
c("31-01-2019","28-02-2019","31-03-2019")))
df2
# name 31-01-2019 28-02-2019 31-03-2019
#1 a NA NA NA
#2 b NA NA NA
#3 c NA NA NA
#4 d NA NA NA
Ответ №2:
Мы можем преобразовать подмножество данных в matrix
, и оно должно работать как индекс строки / столбца
df2[-1][as.matrix(df1[c("df2_row", "df2_col")])] <- df1$value
df2
# name 31-01-2019 28-02-2019 31-03-2019
#1 a 1 NA NA
#2 b 3 NA NA
#3 c NA NA 5
#4 d NA NA 6