r-如何创建一个函数,用级别的最后3个字符重命名因子的所有级别



我是R编程的新手,我必须创建一个接收f因子的函数end.levels,并且使用我之前设计的函数(我将在下面附加它(,我必须重命名它的所有级别,使其只有原始级别的最后3个字母。函数必须返回具有重命名级别的因子,**而不修改因子数据**,但仅返回级别(这将自动影响数据(。

也就是说,我必须创建一个函数(如果它可以是"final"函数,则使用它(,该函数将返回一个因子的所有元素的最后3个字符。

我设计的功能,我们应该基于它:

finales <- function(v, n){
substr = substr(v, nchar(v) - (n - 1), nchar(v))
return(substr)
}

我试过这样做,但我认为我变得非常复杂:

finales.niveles <- function(f){
substr.var = substr(f, nchar(labels(fac) - 3), nchar(labels(fac))
new.niv = rename(substr.var)
return(new.niv) 
}

我读到nchar((函数不接受因子,为此你必须执行nchar(labels(f((,其中f是因子,但我不确定这是这样还是那样。

当我测试我的功能时,它返回这个错误:

Error in labels (fac) - 3: non-numeric argument for binary operator 

这是功能必须通过的测试因素:

fac = factor(c("Alto","Bajo", "Mediano", "Bajo", "Alto", "Alto", "Mediano"))

我们的目标是回报我们:;lto"ajo"ano"ajo"lto"lto"ano";

以下是该功能必须通过的一些测试:

all(renom == c("lto", "ajo", "ano", "ajo", "lto", "lto", "ano"))

如果有人能帮我做这件事,我将非常感谢

这是有效的:

> fac <- factor(c("Alto","Bajo", "Mediano", "Bajo", "Alto", "Alto", "Mediano"))
> gsub('.+(...)$', '\1', as.character(fac))
[1] "lto" "ajo" "ano" "ajo" "lto" "lto" "ano"

最新更新