Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何按ID列连接数据帧?_R_Dplyr - Fatal编程技术网

R 如何按ID列连接数据帧?

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

我有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         |  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))