cbind工作日匹配

时间:2018-01-09 08:27:33

标签: r match cbind

在询问之前,我已经搜索并阅读了有关stackoverflow的许多其他问题,并尝试了join包中的dplyr,但没有一个给出我想要的结果。

我有两个dfs,想要合并它们df1$col1Wed的第一个值与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)

2 个答案:

答案 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