我有一个包含NA值的数据框 在每一列。我想覆盖这些值。我设置了一个遍历每一列的循环,并应用mutate函数。列名在名称变量中。我在mutate函数中使用它?
df <- data.frame("Colonne1" = c(1, 2, NA, 4, 5, NA), "Colonne2" = c(6, NA, 8, 9, NA, 11), "Colonne3" = c(NA, 13, 14, NA, 16, 17), "Colonne4" = runif(6))
means_ <- colMeans(df, na.rm = TRUE)[-c(ncol(df))]
for(name in names(means_)){
df <- df %>% mutate(!!name = ifelse(is.na(!!name, Colonne4 * means_[name], !!name)))
}
错误
Error: unexpected '=' in:
" df <- df %>%
mutate(!!name ="
1条答案
按热度按时间ux6nzvsh1#
在
mutate()
中使用across()
可能更容易做到这一点-没有理由提前计算平均值:如果你想知道它在循环中是如何工作的,你可以像下面这样做。首先要注意的是,在
mutate()
中使用字符串作为变量名时,需要将=
更改为:=
。您还可以使用!!sym(name)
计算名称,这将把它当作mutate()
中的变量而不是字符串。创建于2023-06-15带有reprex v2.0.2