R вставляет значения в фрейм данных на основе другого фрейма данных - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть 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

Любые идеи?

Ответы [ 2 ]

2 голосов
/ 03 апреля 2019

Похоже, 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

data

Предполагая, что ваш 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
0 голосов
/ 03 апреля 2019

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