2016-05-16 77 views
2

我有兩個dataframes,像:如何在R中組合兩個不同長度的數據幀?

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:我知道我可以刪除重複的行一旦數據幀在一起。

+6

發佈數據表的圖像不是獲得幫助的最佳方式。你可以將你導入它們的實際數據框發佈到R嗎? – Gopala

回答

2

嘗試在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

問題解決。謝謝! –

0

你可能想使用類似merge()

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

在SQL行話,你想在descripcion_cuenta_N2anualidad列的兩個表(大概是他們兩個)連接在一起。

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?

+0

不客氣@TheoSloot。如果這回答你的問題,請將其標記爲答案。謝謝 – user10853

+0

嗨,謝謝你的回答,儘管我有明顯的錯誤。 該帖子中的圖片是錯誤的,第二個圖片中的「anualidad」列是爲了「2015」,而不是「2014」,所以我可以創建一個數據框,以便我可以比較相同服務的不同值在不同的年份。問題在於不同的年份可能有不同的服務,我不能將它們結合起來。 我會嘗試指令「合併」。再次感謝。 –

+0

解決@russodl。問題的關鍵是我有兩個不同的力量。無論如何感謝編輯和答案。 –

相關問題