使用带mutate的循环

时间:2017-05-23 21:58:21

标签: r for-loop mutate

此脚本正常运行

F <- mutate(F, "1" = ifelse(dt == 1,1,0))

但是,我想制作一个循环,因为我想将它应用于130个字符串

我尝试了这个,但它返回了一个额外的列

for (i in 1:130) {
F <- mutate(F, "i" = ifelse(dt == i, 1, 0))
}

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

您可以在循环

中分配新列,而不是mutate
x <- runif(100, 0, 1)
y <- runif(100, 0, 1)
class <- round(runif(100, 0, 1))
df <- data.frame(cbind(x, y, class))

df <- mutate(df, "1" = ifelse(x == 1,1,0))

for(i in 1:130){
  print(i)
  cola <- paste('col', i, sep= '')
  df[[cola]] <- ifelse(x == i, 1, 0)
}

答案 1 :(得分:0)

而不是mutate您必须使用mutate_这是标准评估&#34;版本mutate,这意味着您可以使用带引号的参数。这是代码:

## Sample data:
set.seed(1000)

F <- data.frame(dt = sample.int(5, 20, replace = TRUE))
## Your loop:
for (ii in 1:5){
    F <- F %>% mutate_(.dots = setNames(list(paste0("ifelse(dt == ", ii, ",1,0)")), ii))
}

head(F)
#   dt 1 2 3 4 5
# 1  2 0 1 0 0 0
# 2  4 0 0 0 1 0
# 3  1 1 0 0 0 0
# 4  4 0 0 0 1 0
# 5  3 0 0 1 0 0
# 6  1 1 0 0 0 0