【问题标题】:R: merge by combination of first three rows in two dataframesR:通过组合两个数据帧中的前三行进行合并
【发布时间】:2012-03-07 19:01:37
【问题描述】:

我有两个如下所示的数据框:

==fileA    
LmjF.01 257506  257508  1
LmjF.01 257508  257509  2
LmjF.01 257509  257510  3
LmjF.01 257510  257511  4
LmjF.01 257511  257514  5
[...]

==fileB    
LmjF.01 291121  291123  123
LmjF.01 291123  291125  122
LmjF.01 291125  291126  123
LmjF.01 291126  291128  122
LmjF.01 291128  291129  121
[...]

我想将它们合并到一个数据框中,以便第一列、第二列和第三列在两组中匹配,第二列和第三列是具有相关分数的不同大小窗口的开始和结束位置在第四列。第四行是我希望像这样为每个人附加的:

==fileM
LmjF.01 291121  291123  123  12
LmjF.01 291123  291125  122  43
LmjF.01 291125  291126  123  434
LmjF.01 291126  291128  122  342
LmjF.01 291128  291129  121  43
[...]

任何想法如何合并这两个集合?

【问题讨论】:

标签: r merge


【解决方案1】:

我不确定我是否正确理解了您的问题,但函数 merge() 似乎是您的朋友:

fileM <- merge(fileA, fileB, by.x=1:3, by.y=1:3)

【讨论】:

    【解决方案2】:

    这里有一些可重复的数据:

    common <- data.frame(
        id    = 1:27,
        start = seq(as.POSIXct("2012-02-01"), as.POSIXct("2012-02-27"), "days"),
        end   = seq(as.POSIXct("2012-02-03"), as.POSIXct("2012-02-29"), "days")
    )
    a <- common[sample(27, 15), ]
    a$value <- runif(15)
    b <- common[sample(27, 20), ]
    b$value <- rnorm(20)
    

    要合并数据框,您只需调用merge,指定要匹配的列。

    merge(a, b, c("id", "start", "end"))
    

    【讨论】:

    • 在这个例子中,要么所有三列(id、start、end)都匹配,要么都不匹配。如果只有某些列匹配,您需要考虑一下您想要什么行为。
    猜你喜欢
    • 2015-08-12
    • 2018-05-31
    • 2019-03-29
    • 2014-04-14
    • 2020-06-24
    • 2017-02-17
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多