如何在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