【问题标题】:R - merge by variable column with duplicated entryR - 按具有重复条目的变量列合并
【发布时间】:2013-01-17 09:40:38
【问题描述】:

我正在尝试按 ID 合并两个不同大小的数据。但是,对于匹配的值,两个数据都包含重复的条目,即数据A中可能有三个ID#3,数据B中可能有三个ID#3。当我尝试合并数据时,结果比两者都大得多数据结合。

C<-merge(A,B,by="ID",all.x=T,sort=F)

我想通过 ID 列合并两个数据,使得 B 中的第一个 ID #3 与 A 中的第一个 ID #3 配对,依此类推。

另外,我希望数据 A 的行顺序保持不变。 sort=FALSE 没有多大帮助:它将所有匹配的行放在顶部,将不匹配的行放在底部。

感谢您的帮助!

【问题讨论】:

标签: r sorting merge duplicates


【解决方案1】:

在合并之前,您需要向每个 data.frame 添加一个列,其值记录每个观察值在其自己的 ID 组中的索引。

## Example data
A <- data.frame(ID=c(1,1,1,2), ht=1:4)
B <- data.frame(ID=c(1,1,2,2), wt=3:6)

## Add column with number of each observation within ID
A <- transform(A, ID2=ave(ID, ID, FUN=seq_along))
B <- transform(B, ID2=ave(ID, ID, FUN=seq_along))

## Now carry out the merge
merge(A, B, all.x=TRUE, sort=FALSE)
#   ID ID2 ht wt
# 1  1   1  1  3
# 2  1   2  2  4
# 3  2   1  4  5
# 4  1   3  3 NA

【讨论】:

  • 行的顺序仍然没有保留,但它与我想要的重复条目匹配!谢谢!
  • @shirleywu -- 要保持行的顺序,只需去掉 sort=FALSE 位,如下所示:merge(A, B, all.x=TRUE)
  • 如果没有sort=FALSE 位,合并会自动假定sort=TRUE 并将行从小到大排序。我会尽力解决这个问题^^
  • 不确定您真正想要什么顺序,但听起来可能是这样:merge(A[1:2], merge(A, B, all.x=TRUE, sort=FALSE))。看起来对吗?
  • 使用添加一列索引的逻辑,我在A中添加了一列order,现在数据按照A排序:)
【解决方案2】:

感谢您的帮助,它真的很有用。我最终将一列数字添加到我想要保留顺序的较大数据中。

使用@Josh O'Brien 的示例,

> ## Example data
> A <- data.frame(ID=c(1,1,1,2), ht=1:4)
> B <- data.frame(ID=c(1,1,2,2), wt=3:6)
> 
> ## Add column with number of each observation within ID
> A <- transform(A, ID2=ave(ID, ID, FUN=seq_along))
> B <- transform(B, ID2=ave(ID, ID, FUN=seq_along))
> 
> # Add a new column in A that numbers the row from 1 to number of row
> A$ORDER_DATA <- 1:nrow(A) 
> 
> ## Now carry out the merge
> C<-merge(A, B, all.x=TRUE, sort=FALSE)
> 
> # Sort the merged data by ORDER_DATA column
> D<-C[with(C,order(ORDER_DATA)),]
> D
  ID ID2 ht ORDER_DATA wt
1  1   1  1          1  3
2  1   2  2          2  4
4  1   3  3          3 NA
3  2   1  4          4  5

【讨论】:

    猜你喜欢
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2018-05-11
    • 2016-05-12
    • 2022-11-04
    相关资源
    最近更新 更多