Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.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中合并3个数据帧_R_Join_Merge_Dataframe - Fatal编程技术网

如何在R中合并3个数据帧

如何在R中合并3个数据帧,r,join,merge,dataframe,R,Join,Merge,Dataframe,嗨,我想像这样合并3个数据帧: df1 A B 1 1 6 2 2 7 3 3 8 4 4 9 5 5 1 df2 C D 1 NA NA 2 NA NA 3 3 8 4 4 9 5 5 1 6 8 9 7 1 2 df3 E F 1 NA NA 2 NA NA 3 5 6 4 4 9 merged dataframe : A B C D E F 1 1 6 NA NA NA

嗨,我想像这样合并3个数据帧:

df1
   A B 
1  1 6 
2  2 7
3  3 8
4  4 9
5  5 1

df2
   C  D 
1  NA NA  
2  NA NA
3  3  8
4  4  9
5  5  1
6  8  9
7  1  2

df3
   E   F 
1  NA NA 
2  NA NA
3  5  6
4  4  9


merged dataframe :

   A  B  C   D  E  F 
1  1  6  NA NA  NA NA
2  2  7  NA NA  NA NA
3  3  8  3  8   NA NA
4  4  9  4  9   NA NA
5  5  1  5  1   NA NA
6  NA NA 8  9   NA NA
7  NA NA 1  2   NA NA
8  NA NA NA NA  5  6
9  NA NA NA NA  4  9
问题是,我如何在不丢失值的情况下在这3个数据帧之间进行合并,如果R中有一个函数,是谁做的,因为我对合并函数做了很多操作,但它不起作用
你能帮我吗,谢谢你

file1 <- paste("C:\\df1.csv")
table1 <- read.table(file1,sep=",",header=T,fill=TRUE)

file2 <- paste("C:\\df2.csv")
table2 <- read.table(file2,sep=",",header=T,fill=TRUE)

file3 <-  paste("C:\\df3.csv")
table3 <- read.table(file3,sep=",",header=T,fill=TRUE)
d2<-table3[5:nrow(table3),]
for(i in 1:4) { d2 <- rbind(rep(NA, ncol(table3)), d2) }
row.names(d2) <- 1:nrow(d2)
d3<-table1[10:nrow(table1),]
for(i in 1:9) { d3 <- rbind(rep(NA, ncol(table1)), d3) }
row.names(d3) <- 1:nrow(d3)


temp_merge <-merge(d3, d2,by=0,  all = TRUE)
temp_merge <- temp_merge[,-1]

final_merge <- merge(table2,temp_merge, by=0, all=TRUE)
row.names(final_merge) <- 1:nrow(final_merge)
final_merge <- final_merge[,-1]
file1With:
merge(x,y,by=intersect(name(x),name(y)),all=TRUE)
将保留所有值,并且仅在一个Data.frame中的行将填充NA

a <- data.frame(a=1:10, b=10:1) 
a <- cbind(rn=1:nrow(a),a) 
c <- data.frame(d=5:15, e=15:5) 
c <- cbind(rn=(1+5):(nrow(c)+5),c) 
d <- data.frame(a=1:3, rn=5:7) 
ac <- merge(a,c, by.x="rn", by.y="rn", all=T) 
acd <- merge(ac,d, by.x="rn", by.y="rn", all=T)

a此处“合并”的规则是什么?
cbind()
可用于将data.frames绑定到一起,但这要求它们具有相同的行数。在您的示例中,我不明白为什么额外的
NA
s添加到df2的底部,而添加到df3的顶部。请向我们展示您尝试过的代码,并解释为什么它不能满足您的需求。您似乎按行名(
by=0
)合并了df1和df2。但“添加”df3的规则尚不清楚。这些都不是问题。如果没有,为什么?@Henrik我把我的代码放进去,其他帖子对我没有帮助,因为我需要按特定顺序合并3个数据帧,如果你看到我的代码d2是一个数据帧,前4行=NA,d3前10行=NA,我会做这种操作来同步我的数据,所以通常当我合并d2和d3时,d3必须对d2的前10行使用NA。简单的合并不起作用,因为我的数据是随机合并的,我不知道发生了什么,感谢您尝试确保d1中包含(3,8)的行与d2中的(3,8)行(均为第3行)对齐,并且由于d2的尾部和d3的头部之间没有共同点,那么d3应该在d3之后立即启动?这有点让人困惑,因为d2已经用NAs填充了以实现这一点,但不是d3,所以我不确定NAs的用途-也就是你在评论中说d3有10行NA-但它在原始版本中只有两行NApost@Jullian,谢谢你的回答,但它不起作用,你可以看到我的代码可能是出了问题
by=0
造成了问题。如果您有roindices,请使用它们,否则将它们添加为
cbind
a