首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有重复条目的可变列的r-合并

带有重复条目的可变列的r-合并
EN

Stack Overflow用户
提问于 2013-02-02 00:02:54
回答 2查看 4.2K关注 0票数 4

我试图通过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没有多大帮助:它将所有匹配的行放在顶部,而不匹配的行放在底部。

谢谢你的帮忙!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-02 01:12:13

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

代码语言:javascript
复制
## 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
票数 5
EN

Stack Overflow用户

发布于 2013-02-05 08:50:28

谢谢你的帮助,它真的很有用。最后,我向希望保持顺序的较大数据中添加一列数字。

以@Josh O‘’Brien为例,

代码语言:javascript
复制
> ## 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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14657104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档