【问题标题】:How to Use rbind and cbind on Single Dataframe如何在单个数据帧上使用 rbind 和 cbind
【发布时间】:2016-11-28 11:13:38
【问题描述】:

对于错误的问题框架,我们深表歉意。 我是新手,想自学R。

我有这样一个场景,

t1_df

id   name   address
1     x       india
2     y       usa

t2_df

id   name   address
3     a      india
4     b       usa

现在我尝试使用 data.frame 添加额外的列“msg” 即

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 时,它会给出错误,因为 col 名称不匹配,因为两个 df 具有不同的 col 名称

当我尝试将两个 df 的 cbind 合并到单个数据帧中时 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

我怎样才能得到上面提到的输出。

请给我建议。

提前致谢 莫汉.V

【问题讨论】:

  • 根据显示的示例数据,列名是匹配的。列名中是否有任何前导/滞后空格。使用data.table 中的rbindlist,即rbindlist(list(t1_df, t2_df))
  • 感谢 akrun 的回复,我尝试了您的建议,但它只给了我来自 t1_df 的 t1_msg,正如我所提到的,我需要在单个数据框中获取 2 个 diff 列作为 t1_msg 和 t2_msg的
  • 然后,将列名更改为t1_msg 和t2_msg,并使用dplyr 中的bind_rows,即names(t1_df)[4] &lt;- "t1_msg"; names(t2_df)[4] &lt;- "t2_msg"; bind_rows(t1_df, t2_df)

标签: r dataframe rbind cbind


【解决方案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")

然后使用 merge 来合并数据框。设置 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-05
    • 2018-06-06
    • 2017-02-17
    • 1970-01-01
    • 2015-10-11
    • 2021-12-14
    • 2013-12-01
    • 1970-01-01
    相关资源
    最近更新 更多