我有两个数据框,如:
和
我希望得到类似的东西:
以下是可重复性的数据框:
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:我知道一旦数据帧在一起,我就可以擦除重复的行。
答案 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
列上的两个表连接在一起(可能两者都有)。