在询问之前,我已经搜索并阅读了有关stackoverflow的许多其他问题,并尝试了join
包中的dplyr
,但没有一个给出我想要的结果。
我有两个dfs,想要合并它们df1$col1
中Wed
的第一个值与Wed
中第一次出现的df2$col3
相匹配,那么这两个dfs是如df3所示组合
df1 <- data.frame(col1 = c('Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Mon',
'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun',
'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat',
'Sun', 'Mon', 'Tue'),
col2 = c(102, 101, 100, 107, 91, 80, 80, 68, 65, 69,
69, 74, 66, 58, 59, 64, 76, 70, 73, 71, 60))
df2 <- data.frame(col3 = c('Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun',
'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat',
'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri',
'Sat', 'Sun', 'Mon'),
col4 = c(107, 91, 70, 73, 71, 80, 80, 58, 59, 64, 68,
65, 102, 101, 100, 69, 69, 74, 66, 76, 60))
这就是我想要的!
df3 <- data.frame(col1 = c('Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Mon', 'Tue'),
col2 = c(102, 101, 100, 107, 91, 80, 80, 68, 65, 69, 69, 74, 66, 58, 59, 64, 76, 70, 73, 71, 60),
col3 = c('Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Mon', NA),
col4 = c(91, 70, 73, 71, 80, 80, 58, 59, 64, 68, 65, 102, 101, 100, 69, 69, 74, 66, 76, 60, NA))
col1 col2 col3 col4
Wed 102 Wed 91
Thu 101 Thu 70
Fri 100 Fri 73
Sat 107 Sat 71
Sun 91 Sun 80
Mon 80 Mon 80
Tue 80 Tue 58
Wed 68 Wed 59
Thu 65 Thu 64
Fri 69 Fri 68
Sat 69 Sat 65
Sun 74 Sun 102
Mon 66 Mon 101
Tue 58 Tue 100
Wed 59 Wed 69
Thu 64 Thu 69
Fri 76 Fri 74
Sat 70 Sat 66
Sun 73 Sun 76
Mon 71 Mon 60
Tue 60 NA NA
重要的一点是让df2
删除df2$col3
中的行,直到它与df1$col1
中的工作日相匹配
解决方案:
我使用cbindX
包中的gdata
函数
df3 = cbindX(df1, df2)
答案 0 :(得分:4)
我们可以分两步完成:
找到第一个匹配的df2到df1和的条目
cbind
他们用NA填充空条目。有几种方法可以绑定不等长的数据帧。你可以找到一些here。我选择使用qpcr:::cbind.na()
i1 <- which(df1$col1[1] == df2$col3)[1]
qpcR:::cbind.na(df1, df2[i1:nrow(df2),])
给出,
col1 col2 col3 col4 2 Wed 102 Wed 91 3 Thu 101 Thu 70 4 Fri 100 Fri 73 5 Sat 107 Sat 71 6 Sun 91 Sun 80 7 Mon 80 Mon 80 8 Tue 80 Tue 58 9 Wed 68 Wed 59 10 Thu 65 Thu 64 11 Fri 69 Fri 68 12 Sat 69 Sat 65 13 Sun 74 Sun 102 14 Mon 66 Mon 101 15 Tue 58 Tue 100 16 Wed 59 Wed 69 17 Thu 64 Thu 69 18 Fri 76 Fri 74 19 Sat 70 Sat 66 20 Sun 73 Sun 76 21 Mon 71 Mon 60 1 Tue 60 <NA> NA
答案 1 :(得分:1)
你可以试试这个:
HTML5