【问题标题】:Merge two tables in R在R中合并两个表
【发布时间】:2018-11-09 10:55:29
【问题描述】:

我有两张表,列名、行数和列数都一样:

ID     Q1        Q2
1      aa        bb
2      cc        12
3      q         z


ID     Q1        Q2
1      A         B
2      p         l_
3      23        r

我希望在下一个表中将上面的列与上下文合并并用 \n 分隔,如下所示:

  ID     Q1        Q2
  1      aa        bb
         A         B
  2      cc        12
         p         l_
  3      q         z
         23        r

我试过了,mergerbindcbind,但是我没有得到任何好的结果。 任何想法如何做到这一点?

所需结果:
enter image description here

【问题讨论】:

  • 是什么决定了两行中的哪一行实际分配了ID 值,哪一行没有?
  • ID重复的空白处你想要什么?您是否希望 ID 是一个字符列并在那里有一个空字符串?您不能有空数值 - NA 是另一种可能性,
  • 简短回答 - rbind 他们然后修复任何 ID duplicated(d$ID)
  • 您是否想获得某种打印输出?
  • 我想获得具有相同行数的表格,例如对于 ID:1,我得到一个合并单元格 Q1:包含:'aa' 和 A 等。

标签: r merge rbind


【解决方案1】:

样本数据:

> d1
  ID Q1 Q2
1  1 aa bb
2  2 cc 12
3  3  q  z
> d2
  ID Q1 Q2
1  1  A  B
2  2  p l_
3  3 23  r

行绑定:

> d = rbind(d1, d2)

按 ID 排序:

> d = d[order(d$ID),]

用某些东西替换重复的 ID,例如 NA:

> d$ID[duplicated(d$ID)]=NA

工作完成:

> d
  ID Q1 Q2
1  1 aa bb
4 NA  A  B
2  2 cc 12
5 NA  p l_
3  3  q  z
6 NA 23  r
> 

如果你想创建合并单元格,\n 分隔它们,那么这个:

> cbind(ID=d1$ID, setNames(do.call(cbind.data.frame,lapply(c("Q1","Q2"), function(n){paste(d1[[n]],d2[[n]],sep="\n")})),c("Q1","Q2")))
  ID    Q1     Q2
1  1 aa\nA  bb\nB
2  2 cc\np 12\nl_
3  3 q\n23   z\nr

【讨论】:

  • 但我想保留行数。附图显示了所需的结果
猜你喜欢
  • 2012-03-20
  • 2020-10-16
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
相关资源
最近更新 更多