循環這個腳本工作正常使用與發生變異
F <- mutate(F, "1" = ifelse(dt == 1,1,0))
不過,我想作一個循環,因爲我想將它應用到130個colums
我想這一點,但它返回一個額外列
for (i in 1:130) {
F <- mutate(F, "i" = ifelse(dt == i, 1, 0))
}
任何人都可以幫忙嗎?
循環這個腳本工作正常使用與發生變異
F <- mutate(F, "1" = ifelse(dt == 1,1,0))
不過,我想作一個循環,因爲我想將它應用到130個colums
我想這一點,但它返回一個額外列
for (i in 1:130) {
F <- mutate(F, "i" = ifelse(dt == i, 1, 0))
}
任何人都可以幫忙嗎?
而是發生變異,可以在循環分配新列
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)
}
相反的mutate
,你將不得不使用mutate_
這是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
完美!這兩種解決方案都很好 – Mieke
可能你也許增加一個(https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – Vandenman
要將'ifelse()'應用於每列,可以使用功能基R sapply()並避免循環。 –
您應該查看'?mutate_each'和/或'?mutate_all' –