如何在 R 中组合两个不同长度的数据帧?

How can I combine two dataframes with different lengths in R?

我有两个数据框,例如:

我想要这样的东西:

以下是可再现性的数据帧:

df1 <- data.frame(descripcion_cuenta_N2 = c("Consumos", "Costes Personal", "Fungible Equipamiento", "Servicios"), anualidad = rep(2014, 4), valor = c(10, 11, 12, 13))
df2 <- data.frame(descripcion_cuenta_N2 = c("Consumos", "Costes Personal", "Fungible Equipamiento","Prestaciones", "Servicios"), anualidad = rep(2014, 5), valor = c(11, 20, 8, 9))

一个数据帧,其中缺失的位置用 0 填充,因为在某些情况下我没有得到具有相同行数的数据帧,在这些情况下 rbind 失败,我得到一个错误。

应该使用哪个指令来组合这些数据帧?

谢谢

PS:我知道一旦数据帧在一起我就可以删除重复的行。

您可能想使用 merge():

merge(df1, df2, by=c("descripcion_cuenta_N2", "anualidad"))

在 SQL 行话中,您试图将 descripcion_cuenta_N2anualidad 列(可能是两者)上的两个表连接在一起。

尝试在 dplyr 包中使用 left_join。

library(dplyr)

# make fake data
df1 <- data.frame(id = c("A", "B", "C", "D", "E"), val = rpois(5, 5))
df2 <- data.frame(id = c("A", "B", "C", "E"), val = rpois(4, 20))

# use left_join
df3 <- left_join(df1, df2, by = "id")

# rename and set NAs to 0
names(df3) <- c("id", "val", "val")
df3[is.na(df3)] <- 0

首先,在两列中具有相同名称或相同变量的 2 个变量不是一个好习惯。最好有重复的观察(例如在这种情况下两次 Consmos)。

基于它就像行绑定或合并两个数据框一样简单:

df1 <- data.frame(descripcion_cuenta_N2 = c("Consumos", "Costes Personal", "Fungible Equipamiento", "Servicios"), anualidad = rep(2014, 4), valor = c(10, 11, 12, 13))
df2 <- data.frame(descripcion_cuenta_N2 = c("Consumos", "Costes Personal", "Fungible Equipamiento", "Servicios"), anualidad = rep(2014, 4), valor = c(11, 20, 8, 9))
df <- merge(df1, df2, all = TRUE)

给出:

  descripcion_cuenta_N2 anualidad valor
1              Consumos      2014    10
2              Consumos      2014    11
3       Costes Personal      2014    11
4       Costes Personal      2014    20
5 Fungible Equipamiento      2014     8
6 Fungible Equipamiento      2014    12
7             Servicios      2014     9
8             Servicios      2014    13

如上所述,这种方式更好。

如果您坚持要求,您只需指定要在合并中使用的变量:

df <- merge(df1, df2, by = c("descripcion_cuenta_N2", "anualidad"))

这导致:

  descripcion_cuenta_N2 anualidad valor.x valor.y
1              Consumos      2014      10      11
2       Costes Personal      2014      11      20
3 Fungible Equipamiento      2014      12       8
4             Servicios      2014      13       9

PS:如果您的数据框在 R 中给出,那么回答起来会更容易。这会让您的问题可重现且易于回答。参见 How to make a great R reproducible example?