匹配第一列R后从第二列中绘制值

时间:2016-02-04 16:05:04

标签: r loops conditional

我试图遍历两个数据帧并基于匹配的名称,从第二个数据帧中绘制一个值到第一个数据帧。现在我的代码看起来像

for (n in 1:180){
    for (m in 1:180){
        if (league2008[n,1]==league2009[m,1]){
            league2008[n,23]=league2009[m,23]
            league2008[n,30]=league2009[m,30]
        }
    }
}

所以现在,如果第1列中的名称匹配,我将从2009年到2008年为该名称带来第23和30列值。这样做,但有没有办法更快地完成这个循环,有没有办法我可以命名列而不只是给它们的索引?我想让我的代码更强大,并在将来更改列。

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为这应该可行:

n <- 1:180
m <- 1:180
ind <- expand.grid(n,m)
con <- league2008[ind[,1],1] == league2009[ind[,2],1]
league2008[ind[con,1],23] <- league2009[ind[con,2],23]
league2008[ind[con,1],30] <- league2009[ind[con,2],30]

- 说明 -

这是有效的,因为我们可以向矢量/矩阵/数据帧提供索引向量。举例说明:

a <- 1:10
a[1:5]
# [1] 1 2 3 4 5

我们通过使用n创建mexpand.grid(n,m)之间的所有可能组合来利用这一事实。然后我们执行league2008[ind[,1],1] == league2009[ind[,2],1],它返回每个可能的组合是否满足条件。然后,我们只为那些通过ind返回TRUE的人ind[con,]进行分组。