你好,我在R中有两个daframe,我想将它们连接起来。dfs的结构如下:
x <- data.frame(
S1 = c(10, NA, NA),
S2 = c(21, 22, 23)
)
y <- data.frame(
S1 = c(11, 12, 13, 14),
S2 = c(24, 25, 26, 27)
)
我想有这样的东西:
final <- data.frame(
S1 = c(10, 11, 12, 13, 14, NA, NA),
S2 = c(21, 22, 23, 24, 25, 26, 27)
)
我尝试使用natural_join,但它给我一个错误:
>library("rquery")
> final <- natural_join(ipeadata_d, ipeadata_d.cont, by = "ID",jointype = "FULL")
Error in natural_join.relop(dnodea, dnodeb, jointype = jointype, by = by, :
rquery::natural_join.relop all tables must have all join keys, the following keys are not in some tables: ID
我也尝试了rbind,但是数据帧保持NA。
我想将数据框连接起来,就像在&;final&;示例,并希望在CSV文件中转换最终。谢谢你的帮助。
您可以使用bind_rows
和sort
组合两个数据集,将NA
的列放在最后。
library(dplyr)
bind_rows(x, y) %>%
mutate(ID = row_number(),
across(c(S1, S2), sort, na.last = TRUE))
# ID S1 S2
#1 1 10 21
#2 2 11 22
#3 3 12 23
#4 4 13 24
#5 5 14 25
#6 6 NA 26
#7 7 NA 27
这里有几个问题:
- 首先-您的示例不可复制,因为这些
data.frames
在每个向量中没有相同数量的元素。我假设你的ID向量的长度应该等于S1和S2 第二:听起来你可以在base R中完成你想要的,而不需要任何特殊的函数。您正在尝试连接或"联合"。2个数据帧。R使用命令
rbind
来完成此操作。我在这里假设你想要的输出是什么。
下面是一个使用rbind
的工作示例:
x <- data.frame(
ID = c(1, 2, 3),
S1 = c(10, NA, NA),
S2 = c(21, 22, 23)
)
y <- data.frame(
ID = c(4, 5, 6, 7),
S1 = c(11, 12, 13, 14),
S2 = c(24, 25, 26, 27)
)
final <- rbind(x,y)
> rbind(x,y)
ID S1 S2
1 1 10 21
2 2 NA 22
3 3 NA 23
4 4 11 24
5 5 12 25
6 6 13 26
7 7 14 27
供参考,"合并"通常是指基于共享的列或键组合两个数据帧。