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

时间:2016-05-16 15:28:05

标签: r dataframe rbind

我有两个数据框,如:

Year 1

enter image description here

我希望得到类似的东西:

enter image description here

以下是可重复性的数据框:

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失败,并且我收到错误。

哪个instruccion应该用来组合这些数据帧?

由于

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

3 个答案:

答案 0 :(得分:4)

尝试在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

答案 1 :(得分:1)

首先,在两列中使用两个具有相同名称或相同变量的变量并不是一个好习惯。最好有重复的观察结果(例如,在这种情况下,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?

答案 2 :(得分:0)

您可能希望使用// setup and other code ref = new Firebase(URL); //The firebase reference myuserid = null; //Storage variable myname = null; //Storage variable //Other code //Start of answer code ref.onAuth(function(authData) { //ON login status change if (ref.getAuth()) { //Are they logged in myuserid = authData.uid; //Stores their UID for use userbase = 'Users/' + authData.uid; //Get path to user info ref.child(userbase).on("value", function(snapshot, prevChildKey) { var newData = snapshot.val(); //get data console.log(newData); //View data, confirmed it was what I wanted myname = newData.name; //The important data I needed }) } })

之类的内容
merge()

在SQL术语中,您试图将merge(df1, df2, by=c("descripcion_cuenta_N2", "anualidad")) descripcion_cuenta_N2列上的两个表连接在一起(可能两者都有)。