我最近开始使用R / RStudio进行分析工作,但偶然发现了for循环将帮助我减少许多重复性任务的问题。
我有一个项目,我的下一个行动方针是使用数据集中几个变量的名称,向数据集中添加更多变量。
这是如果我一次给一个名字命名的样子:
#Create variable for if analyst got the game correct
master.set$Lee.Corso.RW <- ifelse(master.set$Lee.Corso == master.set$Winner, "Correct", "Incorrect")
我试图通过创建列表并在for循环中使用列表来为一系列名称执行此操作,如下所示:
Analyst.Names <- names(master.set[, 13:125])
names.length <- length(Analyst.Names)
An.Var.Names.RW <- paste(Analyst.Names[1:names.length], ".RW", sep = "")
for (i in 1: names.length){
#Create variable for if analyst got the game correct
master.set$An.Var.Names.RW[i] <- ifelse(master.set$Analyst.Names[i] == master.set$Winner, "Correct", "Incorrect")
}
当我运行for循环时,我没有任何错误,但是没有任何作用。数据集看起来完全一样。我希望我犯的错误很小。有谁知道我可以做到这一点的方法?
谢谢!
在for
循环中,问题在于我们$
用来提取对象中的值
master.set$An.Var.Names.RW[i] <- ifelse(master.set$Analyst.Names[i] == master.set$Winner, "Correct", "Incorrect")
相反,它可以是 [[
master.set[[An.Var.Names.RW[i]]] <- ifelse(master.set[[Analyst.Names[i]]] == master.set$Winner, "Correct", "Incorrect")
使用可复制的示例
data(iris)
nm1 <- names(iris)[1:3]
for(i in seq_along(nm1)) print(head(iris)$nm1[i])
#NULL
#NULL
#NULL
并将其更改为 [[
for(i in seq_along(nm1)) print(head(iris)[[nm1[i]]])
#[1] 5.1 4.9 4.7 4.6 5.0 5.4
#[1] 3.5 3.0 3.2 3.1 3.6 3.9
#[1] 1.4 1.4 1.3 1.5 1.4 1.7
区别在于,在第一种情况下,它实际上是在检查名称,nm1[i]
而不是检查存储在该对象中的值,即“ Sepal.Length”,“ Sepal.Width”等。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句