R 如何按ID列连接数据帧?
我有3个数据帧,如下面的数据帧,它们的ID可能不一定全部出现 DF1: DF2: DF3: 我希望通过ID连接这3个数据帧,并将不同的列数量添加为单独的列,缺少的数量值可以是0或NA,例如:R 如何按ID列连接数据帧?,r,dplyr,R,Dplyr,我有3个数据帧,如下面的数据帧,它们的ID可能不一定全部出现 DF1: DF2: DF3: 我希望通过ID连接这3个数据帧,并将不同的列数量添加为单独的列,缺少的数量值可以是0或NA,例如: ID | Name | Phone# | Country |State| Amount_month1 | Amount_month2 | Amount_month3 0210 | John K. | 8942829725 | USA | PA | 1300
ID | Name | Phone# | Country |State| Amount_month1 | Amount_month2 | Amount_month3
0210 | John K. | 8942829725 | USA | PA | 1300 | 200 | 300
0215 | Peter | 8711234566 | USA | KS | 50 | 0 | 0
2312 | Steven | 9012341221 | USA | TX | 1000 | 350 | 0
0005 | Haris | 9167456363 | USA | NY | 1200 | 0 | 1250
1212 | Jerry | 9817273794 | USA | CA | 0 | 100 | 1200
1210 | Drew | 8012341234 | USA | TX | 0 | 0 | 1400
您可以从包
dplyr
中使用left\u join
首先连接前两个df,然后将该结果与第三个df连接:
library(dplyr)
df_12 <- left_join(df1,df2, by = "ID")
df_123 <- left_join(df_12, df3, by = "ID")
模拟数据:
df1 <- data.frame(
ID = as.character(1:4),
Amount_month1 = c(100,200,300,400)
)
df2 <- data.frame(
ID = as.character(2:3),
Amount_month2 = c(50,177)
)
df3 <- data.frame(
ID = as.character(3:4),
Amount_month3 = c(666,77)
)
df1使用Reduce
和merge
Reduce(function(x, y) merge(x, y, all=TRUE), list(DF1, DF2, DF3))
这回答了你的问题吗?你试过什么没用的?这看起来像是一组简单的左连接,应该已经在很多文章中介绍过了
library(dplyr)
df_12 <- left_join(df1,df2, by = "ID")
df_123 <- left_join(df_12, df3, by = "ID")
df_123
ID Amount_month1 Amount_month2 Amount_month3
1 1 100 NA NA
2 2 200 50 NA
3 3 300 177 666
4 4 400 NA 77
df1 <- data.frame(
ID = as.character(1:4),
Amount_month1 = c(100,200,300,400)
)
df2 <- data.frame(
ID = as.character(2:3),
Amount_month2 = c(50,177)
)
df3 <- data.frame(
ID = as.character(3:4),
Amount_month3 = c(666,77)
)
Reduce(function(x, y) merge(x, y, all=TRUE), list(DF1, DF2, DF3))