【问题标题】:Merge unique values in R合并 R 中的唯一值
【发布时间】:2014-11-27 18:19:18
【问题描述】:

这里是示例数据:

set.seed(123)
data1 <- data.frame(id1=rep(1:5,each=2),nam1=rnorm(5,1))
data2 <- data.frame(id2=rep(3:12,each=2),nam2=rexp(10,1))

这种合并(以及我所知道的它的扩展)给出:

merge(data1,data2, by.x="id1",by.y="id2")

    id1      nam1      nam2
1    3  2.3152036 2.5419696
2    3  2.3152036 4.8606998
3    3  0.6713674 2.5419696
4    3  0.6713674 4.8606998
5    4  1.4768687 0.6174029
6    4  1.4768687 0.2536772
7    4  2.7471229 0.6174029
8    4  2.7471229 0.2536772
9    5 -0.3507662 2.6098995
10   5 -0.3507662 0.6313073
11   5  2.3152036 2.6098995
12   5  2.3152036 0.6313073

所以它给出了 data1 和 data2 的所有行!相同id的双行。

我想得到的是:

    id1 nam2        nam2
1    1  0.4395244   NA
2    1  0.7698225   NA
3    2  2.5587083   NA
4    2  1.0705084   NA
5    3  1.1292877   0.31422729
6    3  0.4395244   0.14526680
7    4  0.7698225   2.72623646
8    4  2.5587083   0.02915345
9    5  1.0705084   1.00483006
10   5  1.1292877   0.48021473

所以我想只获取data1 和correspod 的条目。数据匹配2

【问题讨论】:

  • 您是否在寻找更多的cbind 而不是merge
  • 我正在寻找基于data2cbindnam2 基于id,我不能只是cbind,不同的列长度。
  • 我认为合并失败是因为你的 ID 不是唯一的,所以为什么不首先让它们唯一,例如make.unique(as.character(data1$id1))?
  • 你是对的!如果您将此作为答案提交,我会接受您的解决方案。谢谢!

标签: r


【解决方案1】:

感谢@Vincent Guillemot 的建议,解决了我真正需要的问题!

set.seed(123)
data1 <- data.frame(id1=rep(1:5,each=2),nam1=rnorm(5,1))
data2 <- data.frame(id2=rep(3:12,each=2),nam2=rexp(10,1))

data1$id1 <- make.unique(as.character(data1$id1))
data2$id2 <- make.unique(as.character(data2$id2))

merge(data1,data2, by.x="id1",by.y="id2",all.x=TRUE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多