【问题标题】:Combining dataframes with unequal rows in R [closed]在R中将数据帧与不相等的行结合起来[关闭]
【发布时间】:2014-02-28 23:00:36
【问题描述】:

假设我有两个数据框,

数据帧 A

id x y 
a  1 2
b  2 3
b  2 4
c  4 3
a  3 7
c  3 4
a  1 0

数据帧 B

id x q
a  1 3.5
a  3 5.7
b  2 4
c  3 2.5
c  4 5.5

数据框 B 有一对唯一的 id 和 x 列。

我想根据列 id 和 x 将 B 与 A 组合,这样如果 A 中有多个相同 id,x 的条目,它们会得到与该 id,x 对应的相同 q 条目。

想要的结果:

id x y q
a  1 2 3.5
b  2 3 4
b  2 4 4
c  4 3 5.5
a  3 7 5.7
c  3 4 2.5
a  1 0 3.5

我尝试过使用合并,但它不重复 q 值,只是将 NA 放在那里。谢谢。

【问题讨论】:

  • merge(A, B) 做到了。我没有看到NAs。
  • 也许你真正的AB 有比你给我们的这个例子更多的列名?
  • 您的x 列是数字还是整数?整数会更好。检查两个数字是否相等总是会出现舍入点错误,这可能就是为什么你没有得到预期的匹配。
  • 谢谢。愚蠢的错误。我最初为 A 和 B 分配了相同的级别,但在代码中重命名了 A 的 id 级别。我会删除这个问题。不过感谢您的帮助。

标签: r


【解决方案1】:

我认为这就是您正在寻找的。可以多列合并

A <- data.frame(id=c("a","b","b","c","a","c","a"), x=c(1,2,2,4,3,3,1), y=c(2,3,4,3,7,4,0))

B <- data.frame(id=c("a","a","b","c","c"),x=c(1,3,2,3,4), q=c(3.5,5.7,4,2.5,5.5))

C <- merge(A,B, by=c(1,2))

   id x y   q
1  a 1 2 3.5
2  a 1 0 3.5
3  a 3 7 5.7
4  b 2 3 4.0
5  b 2 4 4.0
6  c 3 4 2.5
7  c 4 3 5.5

【讨论】:

    【解决方案2】:

    试试这个:

    merge(A, B, by = c('id', 'x')
    

    更多信息:Quick-R

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-21
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多