R使用for()循环用另一个数据帧填充一个数据帧

R使用for()循环用另一个数据帧填充一个数据帧,r,for-loop,R,For Loop,我有两个数据帧,我希望将一个数据帧的值插入另一个数据帧(我们称它们为DF1和DF2) DF1由第1列和第2列组成。第1列(col1)包含字符a到z,而col2具有与每个字符相关联的值(从a到z) DF2是一个包含3列的数据帧。前两个由DF1$col1so的每个组合组成:aa-ab-ac-ad等;其中第一个字母在col1中,第二个字母在col2 我想利用DF1$col2中的值创建一个简单的数学模型,以查看DF1$col1中对象的每个可能组合的结果 我想做的第一步是将值从DF1$col2传输到DF2

我有两个数据帧,我希望将一个数据帧的值插入另一个数据帧(我们称它们为
DF1
DF2

DF1
由第1列和第2列组成。第1列(
col1
)包含字符a到z,而
col2
具有与每个字符相关联的值(从a到z)

DF2
是一个包含3列的数据帧。前两个由
DF1$col1
so的每个组合组成:aa-ab-ac-ad等;其中第一个字母在
col1
中,第二个字母在
col2

我想利用
DF1$col2
中的值创建一个简单的数学模型,以查看
DF1$col1
中对象的每个可能组合的结果 我想做的第一步是将值从
DF1$col2
传输到
DF2$col3
(来自
DF2$col3
的值应该与DF2col1中的值相关联),但这就是我遇到的问题。我现在有

for(j in 1:length(DF2$col1))
{
  ## this part is to use the characters in DF2$col1 as an input 
  ## to yield the output for DF2$col3--
  input=c(DF2$col1)[j]

  ## This is supposed to use the values found in DF1$col2 to fill in DF2$col3

  g=DF1[(DF1$col2==input),"pred"]

  ## This is so that the values will fill in DF2$col3--
  DF2$col3=g
}
当我运行此操作时,
DF2$col3
将为
DF1
中的特定字符填充相同的值(例如,
DF2$col3
将使用与
DF1
中的字符“a”相关联的值填充所有行) 我到底做错了什么


非常感谢您花了这么多时间

正如@Aaron在上面的评论中所建议的那样,您真的应该使用
merge
,但是如果您坚持编写自己的循环,那么您在最后一行就遇到了问题,因为您将
g
值分配给整个
col3
列。您还应该使用
j
索引,如:

for(j in 1:length(DF2$col1))
{
  DF2$col3[j] = DF1[(which(DF1$col2 == DF2$col1[j]), "pred"]
}

如果这不可行,请同时发布一些示例数据库,以便能够提供更多详细信息(我不知道,但有一个gues可能是
“pred”
)。

我不确定我是否完全理解您的问题,但您可以尝试以下方法:

df1 <- data.frame(col1=letters[1:26], col2=sample(1:100, 26))
df2 <- with(df1, expand.grid(col1=col1, col2=col1))
df2$col3 <- df1$col2  

听起来您试图做的是一个简单的连接,即将
DF1$col1
匹配到
DF2$col1
并将相应的值从
DF1$col2
复制到
DF2$col3
中。试试这个:

DF1 <- data.frame(col1=letters, col2=1:26, stringsAsFactors=FALSE)
DF2 <- expand.grid(col1=letters, col2=letters, stringsAsFactors=FALSE)
DF2$col3 <- DF1$col2[match(DF2$col1,  DF1$col1)]

DF1您是否尝试过
merge
?既然你谈到了 COL1 COL2 > <代码> DF1,为什么你认为<代码> PRED <代码>是一个姓氏?这是一个错误;我忘了用df1$col2~z~哦,天哪,我没意识到合并可以这样使用(这里是新手)。感谢你和@Aaron。我忘了将“pred”更改为“DF1$col2”,但我想让您知道替代代码也可以工作。
DF1 <- data.frame(col1=letters, col2=1:26, stringsAsFactors=FALSE)
DF2 <- expand.grid(col1=letters, col2=letters, stringsAsFactors=FALSE)
DF2$col3 <- DF1$col2[match(DF2$col1,  DF1$col1)]