如何在R中合并3个数据帧
嗨,我想像这样合并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
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