我有以下数据框:
df <- data.frame("A" = c("y", "y", "n", "n"),
"B" = c("n", NA, "y", "y"),
"C" = c("n", "y", "y", "n"))
我想将以下代码应用于 A 列和 B 列:
df$A <-
df$A %>%
recode(
"n" = "No",
"y" = "Yes"
) %>%
factor(
levels = c("No", "Yes")
)
我尝试使用以下代码使用 for 循环来解决此问题:
cols <- c("A", "B")
for (i in cols) {
df$i <-
df$i %>%
recode(
"n" = "No",
"y" = "Yes"
) %>%
factor(
levels = c("No", "Yes")
)
}
但是,我收到此错误消息:
Error in UseMethod("recode") :
no applicable method for 'recode' applied to an object of class "NULL"
任何人都可以帮我解决我在这里缺少的东西吗?感谢您的帮助!
最佳答案
使用 dplyr::across
你可以:
library(dplyr)
df <- data.frame("A" = c("y", "y", "n", "n"),
"B" = c("n", NA, "y", "y"),
"C" = c("n", "y", "y", "n"))
mutate(df, across(c(A, B), ~ recode(.x, "n" = "No","y" = "Yes") %>% factor(levels = c("No", "Yes"))))
#> A B C
#> 1 Yes No n
#> 2 Yes <NA> y
#> 3 No Yes y
#> 4 No Yes n
关于r - 如何将一个简单的函数应用于多个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68517152/