首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于清洁因子级别的函数(从janitor::clean_names()中采用)

用于清洁因子级别的函数(从janitor::clean_names()中采用)
EN

Stack Overflow用户
提问于 2022-03-05 09:34:37
回答 1查看 68关注 0票数 0

我很笨,用"(“或"/”)编码了我的许多要素标签。一般来说,它对我是有效的,但现在我正处于这样一个不起作用的点(glht(mod, linfct = c("……")))。

一开始我以为“一定有类似janitor::clean_names(.)的东西”,但不幸的是我找不到这样的东西。我正在寻找的是一个自动函数,可以同时应用于所有因素,如:df%>% mutate(across(where(is.factor), ~f_clean(.x) ) )

我看到干净的pckg,但它需要单独输入的因素水平。我发现的另一个选项是从看门人pck那里更改函数,什么也不起作用。例子见下文。

有人知道如何改进这一点吗?

提前谢谢你,路易丝

例子:

代码语言:javascript
复制
> #Mess up iris
> iris %>% mutate(Species = fct_recode(Species, `set osa` = "setosa", `versi (color)` = "versicolor",`virgi//nica`="virginica" ))-> temp
> 
> #OPTION 1 
> p_load(clean)
> temp %>%  mutate(across(where(is.factor), ~clean_factor(.x ) ))-> i_temp
> get_labels(i_temp$Species)
[1] "set osa"       "versi (color)" "virgi//nica"  
> 
> #OPTION 2
> temp %>% mutate(across(where(is.factor), ~clean_vec(.x) ))-> i_temp
> get_labels(i_temp$Species)
  [1] "set_osa"        "set_osa_2"      "set_osa_3"      "set_osa_4"      "set_osa_5"      "set_osa_6"      "set_osa_7"     
  [8] "set_osa_8"      "set_osa_9"      "set_osa_10"     "set_osa_11"     "set_osa_12"     "set_osa_13"     "set_osa_14"    
 [15] "set_osa_15"     "set_osa_16"     "set_osa_17"     "set_osa_18"     "set_osa_19"     "set_osa_20"     "set_osa_21"    
 [22] "set_osa_22"     "set_osa_23"     "set_osa_24"     "set_osa_25"     "set_osa_26"     "set_osa_27"     "set_osa_28"    
 [29] "set_osa_29"     "set_osa_30"     "set_osa_31"     "set_osa_32"     "set_osa_33"     "set_osa_34"     "set_osa_35"    
 [36] "set_osa_36"     "set_osa_37"     "set_osa_38"     "set_osa_39"     "set_osa_40"     "set_osa_41"     "set_osa_42"    
 [43] "set_osa_43"     "set_osa_44"     "set_osa_45"     "set_osa_46"     "set_osa_47"     "set_osa_48"     "set_osa_49"    
 [50] "set_osa_50"     "versi_color"    "versi_color_2"  "versi_color_3"  "versi_color_4"  "versi_color_5"  "versi_color_6" 
 [57] "versi_color_7"  "versi_color_8"  "versi_color_9"  "versi_color_10" "versi_color_11" "versi_color_12" "versi_color_13"
 [64] "versi_color_14" "versi_color_15" "versi_color_16" "versi_color_17" "versi_color_18" "versi_color_19" "versi_color_20"
 [71] "versi_color_21" "versi_color_22" "versi_color_23" "versi_color_24" "versi_color_25" "versi_color_26" "versi_color_27"
 [78] "versi_color_28" "versi_color_29" "versi_color_30" "versi_color_31" "versi_color_32" "versi_color_33" "versi_color_34"
 [85] "versi_color_35" "versi_color_36" "versi_color_37" "versi_color_38" "versi_color_39" "versi_color_40" "versi_color_41"
 [92] "versi_color_42" "versi_color_43" "versi_color_44" "versi_color_45" "versi_color_46" "versi_color_47" "versi_color_48"
 [99] "versi_color_49" "versi_color_50" "virgi_nica"     "virgi_nica_2"   "virgi_nica_3"   "virgi_nica_4"   "virgi_nica_5"  
[106] "virgi_nica_6"   "virgi_nica_7"   "virgi_nica_8"   "virgi_nica_9"   "virgi_nica_10"  "virgi_nica_11"  "virgi_nica_12" 
[113] "virgi_nica_13"  "virgi_nica_14"  "virgi_nica_15"  "virgi_nica_16"  "virgi_nica_17"  "virgi_nica_18"  "virgi_nica_19" 
[120] "virgi_nica_20"  "virgi_nica_21"  "virgi_nica_22"  "virgi_nica_23"  "virgi_nica_24"  "virgi_nica_25"  "virgi_nica_26" 
[127] "virgi_nica_27"  "virgi_nica_28"  "virgi_nica_29"  "virgi_nica_30"  "virgi_nica_31"  "virgi_nica_32"  "virgi_nica_33" 
[134] "virgi_nica_34"  "virgi_nica_35"  "virgi_nica_36"  "virgi_nica_37"  "virgi_nica_38"  "virgi_nica_39"  "virgi_nica_40" 
[141] "virgi_nica_41"  "virgi_nica_42"  "virgi_nica_43"  "virgi_nica_44"  "virgi_nica_45"  "virgi_nica_46"  "virgi_nica_47" 
[148] "virgi_nica_48"  "virgi_nica_49"  "virgi_nica_50" 
> 
> 
> #SOLUCTION NOT VERY HANDY
> clean_vec(get_labels(temp$Species)) %>% dput
c("set_osa", "versi_color", "virgi_nica")
> temp %>%  mutate(across(where(is.factor), ~clean_factor(.x,c("set_osa", "versi_color", "virgi_nica") ) ))-> i_temp
These factor levels were not found in the data: set_osa, versi_color, virgi_nica
> get_labels(i_temp$Species)
[1] "set_osa"     "versi_color" "virgi_ni
EN

回答 1

Stack Overflow用户

发布于 2022-03-05 18:13:01

clean_character可以使用remove参数

代码语言:javascript
复制
library(clean)
library(dplyr)
library(sjlabelled)
i_temp <- temp %>% 
    mutate(across(where(is.factor), ~
       as.factor(clean_character(.x, remove = "[[:punct:] ]"))))

-checking

代码语言:javascript
复制
> get_labels(i_temp$Species)
[1] "setosa"     "versicolor" "virginica" 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71361054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档