2016-05-16 2 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)) 

dataframe, в которых пропустил позиции заполнены 0, потому что в некоторых случаях я не получаю кадры данных с одинаковым количеством строк, а в тех случаях, rbind не удается, и я получаю сообщение об ошибке.

Какое указание должно использовать для объединения этих данных?

Благодаря

PS: Я знаю, что могу удалить повторяющиеся строки после того, как кадры данных вместе.

+6

Проводка изображений таблиц данных - это не лучший способ получить справку. Можете ли вы опубликовать фактические кадры данных, которые вы импортировали, как в R? – Gopala

ответ

2

Попробуйте использовать left_join в пакете dplyr.

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_N2 и anualidad колонн (предположительно обе из них).

1

Прежде всего, не имеет хорошей практики иметь 2 переменных с одинаковым именем или одной и той же переменной в двух столбцах. Лучше всего иметь двойные наблюдения (например, 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», поэтому я могу создать фрейм данных, в котором я могу сравнивать разные значения одних и тех же сервисов в разные годы. Проблема в том, что разные годы могут иметь разные сервисы, и я не могу их комбинировать. Я попробую инструкцию «merge». Еще раз спасибо. –

+0

Решено @russodl. Дело в том, что у меня есть два df с разными значениями. Спасибо за редактирование и ответ в любом случае. –

Смежные вопросы