【问题标题】:How can I change the names of my levels for a factor in an existing dataset如何更改现有数据集中某个因子的级别名称
【发布时间】:2020-11-20 18:42:50
【问题描述】:

我有以下数据集:

   Rate       WUE
1     1 11.071188
2     1 15.334987
3     1 11.074738
4     1 13.101628
5     1 17.516873
6     1 15.408335
7     1 15.064044
8     1 14.890052
9     1 14.552573
10    1 15.392169
11    1 14.041053
12    1 11.269646
13    2 17.320536
14    2  8.905063
15    2 16.376546
16    2 15.202152
17    2 13.262815
18    2 10.568496
19    2 15.904926
20    2 15.189488
21    2 16.714268
22    2 17.803819
23    2 16.217470
24    3  9.030102
25    3 17.508928
26    3 13.454914
27    3 16.403707
28    3  9.931559
29    3 20.487025
30    3 16.314383
31    3 17.023167
32    3 17.095327
33    3 12.090982
34    3 15.227999
35    3 12.996101
36    4 17.626385
37    4 16.791135
38    4 17.015173
39    4 21.266143
40    4 15.576164
41    4 10.649791
42    4 19.238123
43    4 17.586917
44    4 20.408033
45    4 14.832184
46    4 12.735369
47    4 17.657028

并且想将“Rate”级别的名称从 1-4 更改为实际描述。有没有办法用代码做到这一点?我想避免在excel中这样做。我在 stackoverflow 上使用了搜索功能,但无法找到适用于这样的数据集的答案。提前感谢您的帮助,如果还有什么我可以添加的,请告诉我。

【问题讨论】:

标签: r


【解决方案1】:

这是一个使用来自dplyr 包的mutate 和来自forcats 包的fct_recode 的解决方案。请注意,我使用 tibble 包中的 tibble 创建了示例数据。以下是有关创建正确的 reproducible example 的一些附加信息。

mutate 允许我们修改现有的Rate 变量。

fct_recode 允许您更改因子级别名称。

base r 中的as.factor 用于将Rate 变量强制转换为因子。

如果您对重新排序因子水平感兴趣,您应该考虑使用 forcats 包中的 fct_relevel

代码:

library(tibble)
library(dplyr)
library(forcats)

df <- tibble(
  Rate = c(1, 1, 2, 2, 3, 3, 4, 4),
  WUE = c(10.1, 10.1, 11.2, 11.2, 12.3, 12.3, 13.4, 13.4)
)

df %>% 
  mutate(
    Rate = fct_recode(as.factor(Rate),
                      description_1 = "1",
                      description_2 = "2",
                      description_3 = "3",
                      description_4 = "4")
  )

输出:

#> # A tibble: 8 x 2
#>   Rate            WUE
#>   <fct>         <dbl>
#> 1 description_1  10.1
#> 2 description_1  10.1
#> 3 description_2  11.2
#> 4 description_2  11.2
#> 5 description_3  12.3
#> 6 description_3  12.3
#> 7 description_4  13.4
#> 8 description_4  13.4

原表:

# A tibble: 8 x 2
   Rate   WUE
  <dbl> <dbl>
1     1  10.1
2     1  10.1
3     2  11.2
4     2  11.2
5     3  12.3
6     3  12.3
7     4  13.4
8     4  13.4

reprex package (v0.3.0) 于 2020 年 11 月 20 日创建

【讨论】:

    【解决方案2】:

    您可以在factor() 中使用标签参数。

    dataset$Rate <- factor(dataset$Rate, labels = c("A", "B", "C", "D"))
    

    它会更改因子中级别的标签名称(与级别的顺序相同)。
    仅供参考,默认为factor(labels = levels)。运行?factor()了解更多信息。

    【讨论】:

      【解决方案3】:

      如果我对问题的理解正确,您想重命名 Rate 列的级别。 我建议这样重命名:

      data$Rate[data$Rate==1]<-"Description 1"
      data$Rate[data$Rate==2]<-"Description 2"
      data$Rate[data$Rate==3]<-"Description 3"
      data$Rate[data$Rate==4]<-"Description 4"
      

      然后再次制作所有因素:

      data$Rate<-as.factor(data$Rate)
      

      【讨论】:

        猜你喜欢
        • 2015-06-25
        • 2015-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-16
        • 1970-01-01
        • 2013-01-16
        • 1970-01-01
        相关资源
        最近更新 更多