我可以编写一个函数来重估因子的水平吗?

问题描述 投票:1回答:1

我在数据框中有一个列'lg_with_children',具有5个级别,即“一半和一半”,“普通话”,“ Shanghainese”,“其他”,“不适用”和“不重要”。我想将“上海人”和“其他”这5个级别浓缩为2个级别。

为了做到这一点,我使用了plyr包中的revalue()函数来成功重命名级别。我使用了下面的代码,效果很好。

data$lg_with_children <- revalue(data$lg_with_children,
                             c("Mandarin" = "Other"))
data$lg_with_children <- revalue(data$lg_with_children,
                             c("Half and half" = "Other"))
data$lg_with_children <- revalue(data$lg_with_children,
                             c("N/A" = "Other"))
data$lg_with_children <- revalue(data$lg_with_children,
                             c("Not important" = "Other"))

为了稍微简化代码,我在重新评估级别并尝试编写函数之前先返回了数据。在研究了如何编写自己的函数之后,我尝试了以下方法(对此我很陌生)。

revalue_factor_levels <- function(df, col, source, target) {df$col <- revalue(df$col, c("source" = "target"))}

我有意离开了df,col,source和target泛型,因为我需要以相同的方式重估其他一些列。

接下来,我试图运行填充在args中的代码并得到以下消息:

warning message

我不太确定是什么问题。我尝试对代码进行以下调整,但还是一无所获。

revalue_factor_levels <- function(df, col, source, target) {df$col <- revalue(df$col, c(source = target))}

任何指导表示赞赏。谢谢。

r function plyr
1个回答
0
投票

可以编写函数来重新编码级别-最简单的方法可能是直接使用level(fac) <- list(new_lvl1 = c(old_lvl1, old_lvl2), new_lvl2 = c(old_lvl3, old_lvl4))更改级别。

但是已经有很多功能可以直接使用。我通常使用forcats包来操纵因子。

fct_recode包中检出forcatsLink to doc

© www.soinside.com 2019 - 2024. All rights reserved.