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

如何在R中组合两个长度不同的数据帧?,r,dataframe,rbind,R,Dataframe,Rbind,我有两个数据帧,如下所示: 及 我想得到这样的东西: 以下是再现性的数据框: 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_cuent

我有两个数据帧,如下所示:

我想得到这样的东西:

以下是再现性的数据框:

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))

df1您可能希望使用类似于
merge()


在SQL行话中,您试图将
description\u cuenta\u N2
anualidad
列上的两个表连接在一起(可能两者都是)。

尝试在dplyr包中使用left\u 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
库(dplyr)
#伪造数据

df1首先,在两列中使用两个同名变量或相同变量不是一个好的做法。最好有重复的观察结果(例如,在这种情况下,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)
如上所述,这种方式更好

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

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

PS:如果你的数据框在R中给出,那么回答起来会更容易。也就是说,这会使你的问题更容易重复,也更容易回答。请参见

发布数据表的图像并不是获得帮助的最佳方式。你能将你导入的实际数据帧发布到R中吗?欢迎@Theoslot。如果这回答了您的问题,请将其标记为答案。谢谢,谢谢你的回答,尽管我犯了明显的错误。帖子中的图片是错误的,第二栏中的“anualidad”是指“2015”,而不是“2014”,因此我可以制作一个数据框,在其中我可以比较不同年份相同服务的不同价值。问题是不同的年份可能有不同的服务,我无法将它们结合起来。我将尝试“合并”指令。再次感谢。由@russodl解决。问题的关键是我有两个不同法律的df。谢谢你的编辑和回答。
  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