通过公共列合并R中的不均匀数据帧,并按NA

时间:2017-07-12 07:00:38

标签: r merge

这些是我正在处理的两个数据帧的示例。 '权利要求'行数比“最后行动”少。

enter image description here

我的尝试发出以下错误。

newtable <- merge(claims, lastaction, by = "X", all = TRUE)
  

[。data.frame( tmp ,值,值= NA)中的错误:新列   会在现有列之后留下漏洞

newtable <- merge(claims, lastaction, by.x = claims$X, by.y = lastaction$X, all = TRUE)
  

fix.by(by.x,x)出错:&#39;&#39;必须匹配列数

1 个答案:

答案 0 :(得分:1)

merge功能对我来说很好。由于两个数据框具有相同的列名X,因此可以使用by进行合并。

claims = data.frame(X = c(10,24,30,35,64,104), 
                    TransactionDateTime = c('JUL-15','APR-17','SEP-15','JUL-15','APR-16','SEP-15'))
claims
#     X TransactionDateTime
# 1  10              JUL-15
# 2  24              APR-17
# 3  30              SEP-15
# 4  35              JUL-15
# 5  64              APR-16
# 6 104              SEP-15

lastaction = data.frame(X = c(10,24,30,35,40,57), lastvalue = c(6,1,4,6,6,1), 
                        Approvalmonth = c('15-OCT','17-JAN','16-MAR','15-OCT','15-SEP','17-JUN'), 
                        lastvalue = c(0,1,0,0,0,1)) 
lastaction
#    X lastvalue Approvalmonth lastvalue
# 1 10         6        15-OCT         0
# 2 24         1        17-JAN         1
# 3 30         4        16-MAR         0
# 4 35         6        15-OCT         0
# 5 40         6        15-SEP         0
# 6 57         1        17-JUN         1

merge(claims, lastaction, by = "X", all = TRUE)
#     X TransactionDateTime lastvalue Approvalmonth lastvalue.1
# 1  10              JUL-15         6        15-OCT           0
# 2  24              APR-17         1        17-JAN           1
# 3  30              SEP-15         4        16-MAR           0
# 4  35              JUL-15         6        15-OCT           0
# 5  40                <NA>         6        15-SEP           0
# 6  57                <NA>         1        17-JUN           1
# 7  64              APR-16        NA          <NA>          NA
# 8 104              SEP-15        NA          <NA>          NA

dplyr的{​​{1}}也可以

full_join