Как использовать rbind и cbind на одном кадре данных

Извините за неправильную постановку вопроса. Я новичок, пытаюсь выучить R самостоятельно.

У меня есть такой сценарий,

t1_df

id   name   address
1     x       india
2     y       usa

t2_df

id   name   address
3     a      india
4     b       usa

Теперь я попытался добавить дополнительный столбец «msg», используя data.frame, т.е.

t1_df <- data.frame(t1_df,msg)
t2_df <- data.frame(t2_df,msg)

t1_df

  id   name   address   msg
  1     x       india   hi
  2     y       usa     hello

t2_df

id   name   address   msg
3     a      india     go
4     b       usa      bye

когда я пытался выполнить rbind, выдается ошибка, поскольку имена столбцов не совпадают, потому что оба df имеют разные имена столбцов

Когда я попытался привязать оба df к одному фрейму данных t, он включал все столбцы из обоих df, т.е.

имена столбцов(t)

id   name   address   t1_msg   id   name   address   t2_msg

Но я хотел бы получить фрейм данных как

id   name   address   t1_msg   t2_msg
  1     x       india   hi       NA
  2     y       usa     hello    NA
  3     a      india     NA      go
  4     b       usa      NA      bye

Как я могу получить вывод, как я уже упоминал выше.

Пожалуйста, предложите мне.

Заранее спасибо Мохан.В.


person Bunny    schedule 28.11.2016    source источник
comment
Судя по приведенным в примере данным, имена столбцов совпадают. Есть ли у вас начальные/отстающие пробелы в именах столбцов. Используйте rbindlist из data.table, т.е. rbindlist(list(t1_df, t2_df))   -  person akrun    schedule 28.11.2016
comment
спасибо за ответ, akrun, я попробовал то, что вы предложили, но это дало мне только t1_msg из t1_df, как я уже упоминал, мне нужно получить 2 столбца diff как t1_msg и t2_msg в одном фрейме данных   -  person Bunny    schedule 28.11.2016
comment
Затем измените имена столбцов на t1_msg и t2_msg и используйте bind_rows вместо dplyr, т.е. names(t1_df)[4] <- "t1_msg"; names(t2_df)[4] <- "t2_msg"; bind_rows(t1_df, t2_df).   -  person akrun    schedule 28.11.2016


Ответы (1)


Похоже, вам нужно использовать слияние. Пример:

воссоздание ваших фреймов данных:

t1_df<-as.data.frame(matrix(c(1,     "x",      "india",
                              2,     "y",       "usa"), ncol= 3, nrow =2, byrow= T)
                     )
names(t1_df) <- c("id","name","address")

t2_df<-as.data.frame(matrix(c(3,     "a",      "india",
4,     "b",       "usa"), ncol= 3, nrow =2, byrow= T))
names(t2_df) <- c("id","name","address")

Добавьте переменные сообщения. Чтобы использовать слияние, дайте обеим переменным немного другое имя (в вашем случае t1_msg и t2_msg)

t1_df$t1_msg <- c("hi","hello")
t2_df$t2_msg <- c("go","bye")

Затем используйте слияние, чтобы объединить кадры данных. Установка all = TRUE добавит строки, которые не имеют точного соответствия в другом фрейме данных.

merge(t1_df,t2_df,all = TRUE)

Результирующий кадр данных выглядит следующим образом:

  id name address t1_msg t2_msg
1  1    x   india     hi   <NA>
2  2    y     usa  hello   <NA>
3  3    a   india   <NA>     go
4  4    b     usa   <NA>    bye
person Niek    schedule 28.11.2016