Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将fct_relabel与strsplit一起使用或类似于relabel a factor column?_R_Dplyr_Forcats - Fatal编程技术网

如何将fct_relabel与strsplit一起使用或类似于relabel a factor column?

如何将fct_relabel与strsplit一起使用或类似于relabel a factor column?,r,dplyr,forcats,R,Dplyr,Forcats,我正在尝试使用tidyverse代码自动更改因子列的标签,但在基于简单函数更改标签时遇到问题 一些示例数据如下所示: subjectid Parameter value <chr> <fct> <dbl> 1 13 alpha_IST 0.0751 2 13 alpha_IEX 15.7 3 13 alpha_CB 0.236 4 15 alpha

我正在尝试使用tidyverse代码自动更改因子列的标签,但在基于简单函数更改标签时遇到问题

一些示例数据如下所示:

   subjectid Parameter   value
   <chr>     <fct>       <dbl>
 1 13        alpha_IST  0.0751
 2 13        alpha_IEX 15.7   
 3 13        alpha_CB   0.236 
 4 15        alpha_IST  0.0680
 5 15        alpha_IEX 16.5   
 6 15        alpha_CB   0.282 
 7 17        alpha_IST  0.0793
我试图去掉冗余的参数标签的前半部分(即删除alpha)

鉴于上述对象称为medians,我可以使用:

par_标签%mutate(参数=因子(参数,标签=par_标签))
似乎我应该能够使用这个函数构建相同的功能,但是我似乎无法让它工作

我试过:

中位数%>%
mutate(参数=fct_relabel)(参数,函数(x){
strsplit(x,“”)[2]
}))
它给出了错误
error:mutate()输入参数的问题。✖ 新的\u级别必须是字符向量

我还尝试:

中位数%>%
mutate(参数=fct_relabel)(参数,函数(x){
strsplit(x,“”)[1][2]
}))
其错误消息如下:
error:mutate()输入参数有问题。✖ 新等级必须与等级(f)长度相同:预计3个新等级,得到1个。


我也尝试过其他组合,但同样没有成功,我可以看到,转换为字符向量,使用tidyr分离,然后转换回因子将起作用,但我觉得这应该是可能的,以类似于我尝试过的方式。这可能吗?

您可以使用
fct\u relabel
作为:

library(dplyr)
library(forcats)

medians %>%
  mutate(Parameter = fct_relabel(Parameter, 
                       function(x) sapply(strsplit(x, "_"), `[`, 2)))

# subjectid Parameter   value
#  <chr>     <fct>       <dbl>
#1 13        IST        0.0751
#2 13        IEX       15.7   
#3 13        CB         0.236 
#4 15        IST        0.068 
#5 15        IEX       16.5   
#6 15        CB         0.282 
levels(medians$Parameter) <- sub('.*_', '', levels(medians$Parameter))
medians %>%
  mutate(Parameter = fct_relabel(Parameter, ~ sub('.*_', '', .x)))