r - 有没有办法在 tidyverse 生态系统中使用循环?

标签 r for-loop dplyr tidyverse

我尝试循环使用 mutate 和 fct_recode 函数来重新编码此问题,但没有成功。有没有办法解决这个问题,无论是 tidyverse 还是其他方式?抱歉啰嗦了 - 我想尽可能清楚。

set.seed(2021)

df <- tibble(

  a1 = factor(ifelse(sign(rnorm(30))==-1, 0, 1), labels = c("", "Yes")),
  a2 = factor(ifelse(sign(rnorm(30))==-1, 0, 1), labels = c("", "Yes")),
  b1 = factor(ifelse(sign(rnorm(30))==-1, 0, 1), labels = c("", "Yes")),
  b2 = factor(ifelse(sign(rnorm(30))==-1, 0, 1), labels = c("", "Yes")),
  d1 = gl(2, 15, labels = c("Males", "Females")),
  d2 = factor(ifelse(sign(rnorm(30))==-1, 0, 1), labels = c("Python", "R"))
)

df %>% count(a1)

# Replace "" with No

myvars <- c("a1", "a2", "b1", "b2")


df %>% mutate(a1 = factor(if_else(a1 == "", "No",
                                  as.character(a1))),
              a2 = factor(if_else(a1 == "", "No",
                                as.character(a1))),
              b1= factor(if_else(b1== "", "No",
                                  as.character(b1))))

#---- Attempt one (forloop)

# Desire for all the variables

for (i in myvars){

  df <- df %>%
    mutate(i = factor(if_else(i == "", "No",
                              as.character(i))))
}

df %>% count(a1) # No replacement

最佳答案

tidyverse 有自己的“循环”函数。

要将函数应用于多列,您可以使用across

library(dplyr)

df <- df %>% mutate(across(all_of(myvars), 
               ~factor(if_else(. == "", "No", as.character(.)))))

df %>% count(a1)

#  a1        n
#  <fct> <int>
#1 No       12
#2 Yes      18

关于r - 有没有办法在 tidyverse 生态系统中使用循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66900216/

相关文章:

r - data.frame 中具有多个值的列

r - 报告 data.frame 中缺失值的优雅方法

c - 整理文件输出问题

python - 如何在Python中对范围函数的值求和

Javascript 在 for 循环中设置超时函数

r:计算累积值时用0替换NA

c++ - 英特尔DAAL 2017 Beta更新1编译错误

r - 对 dist() 的输出进行排序

r - 如何为数据框的每一行创建列联表

r - 如果另一列包含特定值集,则使用 R 中的 dplyr 过滤列