连接两个数据帧并替换R中的NA值,并将结果转换为csv文件



你好,我在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_rowssort组合两个数据集,将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

供参考,"合并"通常是指基于共享的列或键组合两个数据帧。