匹配第一列 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
我们通过创建 n
和 m
与 expand.grid(n,m)
之间的所有可能组合来利用这一事实。然后我们做 league2008[ind[,1],1] == league2009[ind[,2],1]
,其中 returns 为每个可能的组合是否满足条件。然后,我们通过 ind[con,]
.
仅对 return TRUE
的子集 ind
我正在尝试遍历两个数据框,并根据匹配的名称,将第二个数据框中的值绘制到第一个数据框中。现在我的代码看起来像
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
我们通过创建 n
和 m
与 expand.grid(n,m)
之间的所有可能组合来利用这一事实。然后我们做 league2008[ind[,1],1] == league2009[ind[,2],1]
,其中 returns 为每个可能的组合是否满足条件。然后,我们通过 ind[con,]
.
TRUE
的子集 ind