gpt4 book ai didi

r - 使用 dplyr 链从因子标签中去除尾随空格

转载 作者:行者123 更新时间:2023-12-04 09:47:38 26 4
gpt4 key购买 nike

我加载了一个数据框,它在因子标签中带有尾随空格。我试图删除数据帧中每个因素中的那些尾随空格,但到目前为止没有成功。

可重现的例子

lvls <- c('a   ',
'b ',
'c ')
set.seed(314)
raw <- data.frame(a = factor(sample(lvls,100, replace=T)),
b = sample(1:100,100))

proc <- raw %>% mutate_each(funs(ifelse(is.factor(.),
factor(as.character(trimws(.)),
labels=unique(as.character(.))),
.)))

str(proc)


'data.frame':   100 obs. of  2 variables:
$ a: int 1 1 1 1 1 1 1 1 1 1 ...
$ b: int 31 31 31 31 31 31 31 31 31 31 ...

这在两个层面上是错误的。该因子没有标签。仅第一次观察重复 100 次

最佳答案

mutate_if是你的 friend 。如果您不在乎是否转换为字符,则可以使用

raw %>% mutate_if(is.factor, trimws)

这表明您可以重新转换为因子:
raw %>% mutate_if(is.factor, funs(factor(trimws(.))))

如果要保持类型,可以使用更复杂的
raw %>% mutate_if(is.factor, funs(`levels<-`(., trimws(levels(.)))))

基本 R 等价物将是
raw[] <- lapply(raw, function(x){if (is.factor(x)) {levels(x) <- trimws(levels(x))} ; x})

尽管如果它是一个变量并且您知道是哪个变量,则 base 非常干净:
levels(raw$a) <- trimws(levels(raw$a))

编辑:现在 forcats::relabel (tidyverse 的一部分)使使用函数更改级别更容易:
raw %>% mutate_if(is.factor, fct_relabel, trimws)

或对于单个变量,
raw %>% mutate(a = fct_relabel(a, trimws))

它也将接受匿名函数,包括 purrr 风格的 ~trimws(.x)如果你喜欢。

关于r - 使用 dplyr 链从因子标签中去除尾随空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41467589/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com