我有两个df,看起来像:
>df1
name time date
Dan 01:00 Apr-17
Ann 02:00 Apr-17
>df2
name time
Joe 03:00
Bob 04:00
>out
name time
Dan 01:00
Ann 02:00
Joe 03:00
我想将df1中的一行合并到df2而不创建新列。此外,names
下的数据是rownames,不应覆盖。我的实际数据帧分别有~800和99列。
我在之前的类似问题中尝试过以下答案,但我无法得到我想要的结果,包括rbind,bind_rows,rbind.fill。这些工作在某种程度上但总是删除我的rownames
rbind.fill(df1, df2[colnames(df2) %in% colnames(df2)])
rbind(df2, df1[1,names(df1)])
bind_rows(df1[1,], df2)
答案 0 :(得分:1)
你的尝试非常接近。
rbind.fill(df1, df2[colnames(df2) %in% colnames(df2)])
基本上说:将df1绑定到df2,但只接受df2中也在df2中的列。
但这不是你想要做的。尝试:
rbind(df1[colnames(df1) %in% colnames(df2)], df2)
其中说: 将df1绑定到df2,但只接受df1中也在df2中的列。
结果:
name time
1 Dan 01:00
2 Ann 02:00
3 Joe 03:00
4 Bob 04:00
或者只添加df2中name=="Joe"
rbind(df1[colnames(df1) %in% colnames(df2)], df2[df2$name=="Joe",])
结果:
name time
1 Dan 01:00
2 Ann 02:00
3 Joe 03:00
答案 1 :(得分:0)
以下是使用tidyverse
library(tidyverse)
bind_rows(df1[-3], df2)
# name time
#1 Dan 01:00
#2 Ann 02:00
#3 Joe 03:00
#4 Bob 04:00