Заполните больший (пустой) фрейм данных на основе меньшего - PullRequest
0 голосов
/ 20 мая 2018

Я просто не могу придумать метод для заполнения большего df на основе меньшего.У меня есть большой пустой фрейм данных с двумя временными столбцами (минуты и часы) и 12 другими столбцами, которые содержат элементы NA.

С другой стороны, у меня есть измерения, которые были выполнены в определенной «временной метке»(например, при h = 03 мин = 33 или h = 14 мин 21).

Чем больше фрейм данных, тем больше «непрерывное время», и теперь я хотел бы заполнить значения от меньшего фрейма данных до конкретных строк.И строки, в которых у меня нет измеренных значений, я хочу сохранить их. NA.

Не нашел действительно разумного способа сделать это ...

Меньший набор данных:

hours minutes color length 
0        0      B      1
0        15     G      2
0        30     R      2
0        45     Y      5
1        0      Y      3
1        15     Y      2
1        30     B      1
1        45     W      1
.
.
.
23       45     B       3



 

И более крупный:


hours minutes color length 
0        1     NA     NA
0        2     NA     NA
0        3     NA     NA
.
.
.
23       58    NA      NA
23       59    NA      NA

1 Ответ

0 голосов
/ 20 мая 2018

Мы можем использовать left_join для этого.Поскольку последние столбцы в большом наборе данных пусты, удалите их при выполнении объединения, чтобы в полученном наборе данных не совпадали элементы NA

library(dplyr)   
left_join(dflarge[1:2], dfsmall, by = c('hours', 'minutes'))

data

dfsmall <- structure(list(hours = c(0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L), minutes = c(0L, 
15L, 30L, 45L, 0L, 15L, 30L, 45L), color = c("B", "G", "R", "Y", 
 "Y", "Y", "B", "W"), length = c(1L, 2L, 2L, 5L, 3L, 2L, 1L, 1L
 )), class = "data.frame", row.names = c(NA, -8L))

dflarge <- expand.grid(hours = 0:2, minutes = 1:59)
dflarge[c("color", "length")] <- NA
dflarge <- dflarge[do.call(order, dflarge[1:2]),]
row.names(dflarge) <- NULL
...