r - 如何将一个简单的函数应用于多个列?

标签 r for-loop apply recode

我有以下数据框:

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/

相关文章:

python-3.x - Pandas 在多列上应用元组解包功能

r - R 中的 Monte Carlo 模拟、Bootstrap 和回归

r - 试图将公式应用于 R 中的每一列,如何将数据提供给公式?

r - 将表达式传递到 `MoreArgs` 的 `mapply`

c - for循环条件递增

javascript - 如果对象为空则跳过 for 循环

java - Java中错误的for循环?

r - 如何从二项式检验中提取 p 值

R Shiny 仪表板,更改所有超链接的颜色

r - ggplot多分组栏