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

draw values from 2nd column after matching 1st columns R

我正在尝试遍历两个数据框,并根据匹配的名称,将第二个数据框中的值绘制到第一个数据框中。现在我的代码看起来像

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 列的值。这行得通,但是有没有一种方法可以更快地执行此循环,并且有没有我可以命名列而不是仅仅给出它们的索引的方式?我想让我的代码更健壮并在将来更改列。

谢谢!

我认为这应该可以正常工作:

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]

-- 说明--

这是可行的,因为我们可以为 vector/matrix/data 框架提供一个索引向量。举例说明:

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

我们通过创建 nmexpand.grid(n,m) 之间的所有可能组合来利用这一事实。然后我们做 league2008[ind[,1],1] == league2009[ind[,2],1],其中 returns 为每个可能的组合是否满足条件。然后,我们通过 ind[con,].

仅对 return TRUE 的子集 ind