根据较小的数据框填充较大(空)的数据框

时间:2018-05-19 23:02:01

标签: r dataframe data-manipulation

我根本无法想出一种基于较小的df来填充更大df的方法。我有一个大的空数据框,有两个时间列(分钟和小时)和另外12个包含NA元素的列。

另一方面,我在特定的"时间标签中进行了测量" (例如在h = 03min = 33或h = 14min 21)。

较大的数据帧更大,因为它具有连续时间",现在我想填写从较小数据帧到特定行的值。而且我没有任何测量值的行,我想让它们保持NA。

Haven真的找不到任何聪明的方法......

较小的数据集:

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 :(得分:1)

我们可以使用left_join。由于大型数据集中的最后一列为空,因此在执行连接时将其删除,以便在结果数据集中将NA不匹配的元素

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

数据

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