使用R中的for循环处理数据帧中的多个列

使用R中的for循环处理数据帧中的多个列,r,loops,for-loop,R,Loops,For Loop,我正在尝试使用for循环函数将数据帧中的50列编辑为虚拟变量,这取决于与50个值的给定向量的精确匹配。 我以前从未使用过循环函数,也不知道怎么做 我首先想为50列中的每一列“手工”编写代码,如下所示: dBGK1a <- as.numeric(BGK1a == BGKright[1]) dBGK2a <- as.numeric(BGK2a == BGKright[2]) dBGK3a <- as.numeric(BGK3a == BGKright[3]) .... dBGK50

我正在尝试使用for循环函数将数据帧中的50列编辑为虚拟变量,这取决于与50个值的给定向量的精确匹配。 我以前从未使用过循环函数,也不知道怎么做

我首先想为50列中的每一列“手工”编写代码,如下所示:

dBGK1a <- as.numeric(BGK1a == BGKright[1])
dBGK2a <- as.numeric(BGK2a == BGKright[2])
dBGK3a <- as.numeric(BGK3a == BGKright[3])
....
dBGK50a <- as.numeric(BGK50a == BGKright[50])
循环应该做的是用“i”选择“BGKright”的相应值,用“j”选择要处理的列。请注意,“j”需要在每个循环中跳转2步,因为我只需要处理第二列(从第348列到第448列)

如果您能提供有关此循环的任何帮助,以及无需循环即可完成此任务的其他解决方案,我将不胜感激。

提前谢谢。

好的,我使用了
BGKa=select(data1[348:448],以(“a”)结尾)
来创建一个只包含相关列的新数据框

然后我使用for循环来创建假人

for(i in 1:50) {
    BGKa[i]=as.numeric(BGKa[i]==BGKright[i])
  }

似乎有效。Ty寻求帮助。

确定我使用了
BGKa=select(data1[348:448],以(“a”)结尾)
来创建一个只包含相关列的新数据框

然后我使用for循环来创建假人

for(i in 1:50) {
    BGKa[i]=as.numeric(BGKa[i]==BGKright[i])
  }

似乎有效。Ty寻求帮助。

您可以使用
dput(YOURDATA)
发布数据吗?或者如果数据很大,请使用
dput(head(YOURDATA))
发布数据。的第二个
中缺少一个右括号。这几乎可以用一种(更)有效的方式来实现,请发布
dput(head(BGKright,20))
data1
dput(head(BGKright,20)):c(2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1)
`dput(head(data1,20))`太长了,无法在这里发布。@RuiBarradas我纠正了妄想症错误,不再收到错误消息。由于循环将列“j”中的每个值都更改为“0”,因此它似乎仍然不起作用。您能否使用数据示例(例如,
dput(数据[1:20,])
)编辑您的问题。在您的情况下,如果要编辑满足特定条件的多列,来自
dplyr
mutate\u if
函数非常有用。您可以使用
dput(YOURDATA)
发布数据吗?或者如果数据很大,请使用
dput(head(YOURDATA))
在第二个
中缺少一个右括号。这几乎可以用一种(更)有效的方式来实现,请发布
dput(head(BGKright,20))
data1
dput(head(BGKright,20)):c(2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1)
`dput(head(data1,20))`太长了,无法在这里发布。@RuiBarradas我纠正了妄想症错误,不再收到错误消息。由于循环将列“j”中的每个值都更改为“0”,因此它似乎仍然不起作用。您能否使用数据示例(例如,
dput(数据[1:20,])
)编辑您的问题。在您的情况下,如果要编辑满足特定条件的多个列,则来自
dplyr
mutate\u if
函数非常有用。
for(i in 1:50) {
    BGKa[i]=as.numeric(BGKa[i]==BGKright[i])
  }