如何使用Cross根据变量在某个列表中的名称将变量更改为因子?

如何使用Cross根据变量在某个列表中的名称将变量更改为因子?,r,tidyverse,R,Tidyverse,(我是R的新手) 尝试根据条件将df成员的变量数据类型更改为因子,前提是其名称在列表中可用 我使用mutate(cross())尝试了一些代码,但它给出了错误 数据准备: library(tidyverse) # tidytuesday himalayan data members <- read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-09

(我是R的新手)

尝试根据条件将df
成员的变量数据类型更改为
因子
,前提是其名称在列表中可用

我使用
mutate(cross())
尝试了一些代码,但它给出了错误

数据准备:

library(tidyverse)

# tidytuesday himalayan data
members <- read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-09-22/members.csv")

# creating list of names
to_factors_list <- members %>% 
  map_df(~(data.frame(n_distinct = n_distinct(.x))),
        .id = "var_name") %>%
  filter(n_distinct < 15) %>%
  select(var_name) %>% pull()

to_factors_list

############### output ###############
'season''sex''hired''success''solo''oxygen_used''died''death_cause''injured''injury_type'
members %>%
  mutate(across(~.x %in% to_factors_list, factor))
我不确定出了什么问题,我如何才能做到这一点?

正确的语法是:

members %>% mutate(across(to_factors_list, factor))
或者,如果您更喜欢较旧的版本
dplyr
语法:

members %>% mutate_at(vars(to_factors_list), factor)

base R
中,可以使用
lappy

members[to_factors_list] <- lapply(members[to_factors_list], factor)

members[to_factors_list]谢谢@ekoam,我以为它需要一个conidtion语法,结果写错了代码。非常感谢你的帮助!!谢谢@akrun,这也很有帮助!!
members[to_factors_list] <- lapply(members[to_factors_list], factor)