【问题标题】:merge two data frame with replacing the common rows and col合并两个数据框,替换公共行和列
【发布时间】:2018-12-25 23:51:47
【问题描述】:

我有两个数据。框架(假设 a、b 的大小为 3172*1323、3067*21),我想合并它们,但是,两者共有 21 列,两者共有 3067 行。 我想合并两个数据框,以便替换公共行和公共列,最终大小仅为 3172*1323 我尝试了合并(a,b,by = 0),但它不会帮助我获取我正在寻找的数据。 请帮帮我

A = read.table(header=TRUE, stringsAsFactors=FALSE, row.names=1, text='
Row.names   P1  P2  P3  P4  P5
R_1 1   2   3   4   5
R_2 6   7   8   9   10
R_3 8   6   4   2   1
R_4 2   4   6   8   10')

B = read.table(header=TRUE, stringsAsFactors=FALSE, row.names=1, text='
Row.names   P2  P5
R_2 NA  2
R_4 1   20')

# merge of A and B
C = read.table(header=TRUE, stringsAsFactors=FALSE, row.names=1, text='
Row.names   P1  P2  P3  P4  P5
R_1 1   2   3   4   5
R_2 6   NA  8   9   2
R_3 8   6   4   2   1
R_4 2   1   6   8   20')

【问题讨论】:

  • 你有没有尝试过任何东西,任何代码或什么?
  • 请阅读How to make a great R reproducible example? 并编辑您的问题。
  • 请提供小的可重现示例数据和预期输出。
  • 1.在此站点上搜索:“[r] merge dataframes” 2. 在 R 控制台中键入 ?merge
  • 如果您愿意,您正在寻找一个简单的连接或合并。当您有大量公共列时,您可能希望尝试查找存在问题的重复列。有相同的标签吗?

标签: r dataframe merge


【解决方案1】:

您不需要合并。使用我在您的问题中编辑的数据:

A[row.names(B),colnames(B)] <- B
A
#     P1 P2 P3 P4 P5
# R_1  1  2  3  4  5
# R_2  6 NA  8  9  2
# R_3  8  6  4  2  1
# R_4  2  1  6  8 20

(如果您好奇,可以使用rownamesrow.names。)

【讨论】:

  • 我试过了,但它没有给出预期的输出,因为通过使用它我得到了 3067*21 的数据框,我想要 3067*1323 的数据框大小
  • @ManishSharma 尝试再次查看此代码]。这是正确的代码。
  • Manish,如果AB 都是简单的框架,那么这实际上不会改变两者的尺寸。如果您的框架正在改变形状,那么就会发生其他事情(也许它不包含您认为的内容)。
【解决方案2】:

谢谢大家, 我尝试了上述方法,但在我的情况下不起作用,但是,我在某处看到他们使用以下方法 1.找到交互行或列并将其删除 2. 之后只需使用 cbind 或 rbind

【讨论】:

  • 这看起来很有趣且相关,因此让这个答案更具可重复性对您非常有用。建议:(1)包括实际代码(在您的示例数据上),以说明您的意思; (2) 如果有的话,包括指向“我在某处看到” 的链接。如果您选择不更新答案,我认为它更像是一个 comment 而不是 answer,因为它缺乏足够的细节供有类似问题的好奇的、没有经验的程序员使用。
猜你喜欢
  • 1970-01-01
  • 2011-05-11
  • 2013-09-18
  • 2017-09-03
相关资源
最近更新 更多