r - 有没有办法在 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
推荐阅读
- azure-active-directory - 为什么 Powershell 中提供的详细信息比用于 Exchange 在线服务器、Azure Active Directory 和其他云的 REST API 更多
- python - pixel_per_cell skimage.feature.hog 的默认值
- python - Django:为什么 KeyError:'pk'
- laravel - 仅当存在关系时如何返回数据?
- python - `_base_manager` 或 `_default_manager` 是否应该优先于 Django 中的 `objects`?
- spring-boot - Hikari CP 属性不适用于 Spring 1.5.18 中的多数据源配置
- python - 蜘蛛爬行 0 页
- php - 我想从数据库的列中获取数据,平均接收到的数据,并回显结果
- javascript - 如何从 Web Audio Api 下载过滤后的音频
- php - 使用 preg_match 可以有相同的模式并有不同的替换?