我正在尝试使用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])
因为这非常繁琐,所以我试图提出一个for循环,可以处理这个问题。
for(i in 1:50) {
for (j in seq(from = 348, to = 448, by = 2)){
data1[j] <- as.numeric(data1[j] == BGKright[i])
}
}
由于我在每次观察的每一列中都获得了值“ 0”,因此这不起作用。
data1是我的数据框。这是数据框的简短版本:
dput(head(data1[348:354], 20))
structure(list(BGK1a = c(NA, NA, NA, NA, NA, NA, NA, NA, 2, NA,
NA, NA, NA, NA, 2, 2, 2, 2, 1, 2), BGK1b = c(NA, NA, NA, NA,
NA, NA, NA, NA, 50, NA, NA, NA, NA, NA, 100, 100, 100, 99, 89,
50), BGK2a = c(NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA,
NA, NA, 1, 2, 1, 2, 1, 1), BGK2b = c(NA, NA, NA, NA, NA, NA,
NA, NA, 50, NA, NA, NA, NA, NA, 100, 50, 96, 62, 93, 50), BGK3a = c(NA,
NA, NA, NA, NA, NA, NA, NA, 2, NA, NA, NA, NA, NA, 2, 1, 1, 1,
1, 2), BGK3b = c(NA, NA, NA, NA, NA, NA, NA, NA, 50, NA, NA,
NA, NA, NA, 100, 100, 50, 85, 82, 74), BGK4a = c(NA, NA, NA,
NA, NA, NA, NA, NA, 2, NA, NA, NA, NA, NA, 1, 2, 2, 2, 1, 1)), row.names = c(NA,
-20L), class = c("tbl_df", "tbl", "data.frame"))
循环应该做的是用“ i”选择“ BGKright”的相应值,并用“ j”选择要处理的列。请注意,“ j”每个循环需要跳转2个步骤,因为我只需要处理每隔一列(从第348列到第448列)。
对于此循环以及此任务无循环可能提供的其他解决方案,我将不胜感激。
预先谢谢你。
答案 0 :(得分:0)
好吧,我使用BGKa=select(data1[348:448],ends_with("a"))
来制作一个仅包含相关列的新数据框。
然后,我使用for循环创建了虚拟对象。
for(i in 1:50) {
BGKa[i]=as.numeric(BGKa[i]==BGKright[i])
}
似乎可以正常工作。请帮忙。