[英]Recoding a variable to be a factor w/ level names in R
使用我的數據集自行車共享,我想將變量季節重新編碼為具有有意義的級別名稱(即“冬天”、“春天”、“夏天”、“秋天”)的因子,以春天為基准水平。
這是我的嘗試:
bikeshare <- bikeshare %>%
mutate(season = factor(c(1 = "winter",
2 = "spring",
3 = "summer",
4 = "fall")))
這是我得到的錯誤:
Error in UseMethod("mutate_") : no applicable method for 'mutate_' applied
to an object of class "factor"
我很感激任何幫助,我是初學者。
這是一個如何將數字 ( 1:4
) 轉換為因子(“冬天”、“春天”、“夏天”、“秋天”)的示例。 關鍵是使用factor
函數並相應地設置levels
和labels
。
# Create example data frame
bikeshare <- data.frame(season = 1:4)
bikeshare
# season
# 1 1
# 2 2
# 3 3
# 4 4
library(dplyr)
bikeshare2 <- bikeshare %>%
mutate(season = factor(as.character(season),
levels = c(1, 2, 3, 4),
labels = c("winter", "spring", "summer", "fall")))
bikeshare2
# season
# 1 winter
# 2 spring
# 3 summer
# 4 fall
要創建因子,您需要向factor()
函數提供數據和季節標簽。
但是,由於您希望 Spring 成為基線級別,我相信您必須按特定順序指定級別和標簽 - 強制 spring 成為第一:
bikeshare <- data.frame(season = 1:4)
bikeshare$seasonfactor <- factor(x = bikeshare$season,
levels = c(2,3,4,1),
labels = c("spring", "summer", "fall", "winter"))
str(bikeshare$seasonfactor)
#> Factor w/ 4 levels "spring","summer",..: 4 1 2 3
bikeshare
#> season seasonfactor
#> 1 1 winter
#> 2 2 spring
#> 3 3 summer
#> 4 4 fall
由reprex 包(v0.2.1) 於 2019 年 3 月 3 日創建
這有點令人困惑,因為在seasonfactor
,Spring 用 1 表示,但在原始season
中用 2 表示。
另一種選擇是在labelled
包的幫助下labelled
整數級別。 所以它們仍然是整數,但標簽作為元數據。 如果您想在任何時候將標記的整數轉換為因子,您可以使用to_factor
函數來實現。
library("tidyverse")
library("labelled")
labels <- c(
"winter" = 1,
"spring" = 2,
"summer" = 3,
"fall" = 4)
bikeshare <-
tibble(season = 1:4) %>%
mutate(season = labelled(season, labels)) %>%
mutate(seasonF = to_factor(season))
bikeshare
#> # A tibble: 4 x 2
#> season seasonF
#> <int+lbl> <fct>
#> 1 1 [winter] winter
#> 2 2 [spring] spring
#> 3 3 [summer] summer
#> 4 4 [fall] fall
由reprex 包(v0.2.1) 於 2019 年 3 月 3 日創建
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.