【问题标题】:recode in dplyr from character to numeric in factors在 dplyr 中从字符重新编码为因子中的数字
【发布时间】:2017-03-30 02:20:07
【问题描述】:

我从dplyr V0.5 开始熟悉recode。我错过了什么吗?似乎来自carRecode 更有效。除非我做错了什么:

这行得通:

x <- c("a", "b", "c")
y <- dplyr::recode(x, a = 1, b = 2, c= 3)
y

但当你有一个因素时:

xf <- factor(c("a", "b", "c"))
yf<- dplyr::recode(xf, a = 1, b = 2, c= 3)
Error: `a` has type 'double' not 'character'

似乎您必须将其视为字符并使用 recode_factor 以便它回到因子

Dyf <- dplyr::recode_factor(as.character(xf), a = 1, b = 2, c= 3)
Dyf

这可行,但看起来很冗长???来自carRecode 只需使用:

Cyf <- Recode(x, " 'a'=1; 'b'= 2; 'c' = 3 ")
Cyf  [1] 1 2 3
Levels: 1 2 3

我错过了什么?

谢谢

【问题讨论】:

  • 最新的因子 dplyrish 工具是“forcats”:blog.rstudio.org/2016/08/31/forcats-0-1-0
  • 是的,但我认为forcats 可以很好地处理字符,但它不会将字符更改为数字。
  • 您可以在您的第一个recode 呼叫中将您的 1 等放在引号中:... a = "1", ...
  • 但这基本上会添加字符串数字,我想将它们实际转换为数字。

标签: r dplyr recode


【解决方案1】:

看起来dplyr 已得到增强,可以做你想做的事:

library(dplyr)
#> Warning: package 'dplyr' was built under R version 3.5.3
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
xf <- factor(c("a", "b", "c"))
Eyf<- xf %>% dplyr::recode_factor(a = 1, b = 2, c= 3)
Eyf
#> [1] 1 2 3
#> Levels: 1 2 3
Fyf<- xf %>% dplyr::recode(a = 1, b = 2, c= 3) %>% factor()
Fyf
#> [1] 1 2 3
#> Levels: 1 2 3

reprex package (v0.3.0) 于 2019 年 8 月 28 日创建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2018-04-14
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多