[英]Change factor levels in R using a variable for BOTH factor name AND level order in a data frame
我有一個很大的數據框1,其中有很多列是要考慮的因素。 我想更改每個因子的因子水平順序。
我有一個正確的因子水平順序的查找數據框2。 這意味着我可以使用變量作為因子來引用查詢數據幀。 我可以抓取訂單並將其放在其他變量中。 到現在為止還挺好。
簡化示例:
d = tibble(
size = c('small','small','big', NA)
)
d$size = as.factor(d$size)
levels(d$size) # Not what I want.
proper.order = c('small', 'big') # this comes from somewhere else
我可以使用proper.order
更改d中的一列。
d$size = factor(d$size, levels = proper.order)
levels(d$size) # What I want.
我想使用變量引用列名( size
)。
這不起作用:
my.column = 'size'
d[names(d) == my.column] = factor(d[names(d) == my.column], levels = proper.order, exclude = NULL)
levels(d$size) # What I want.
d # Not what I want.
我希望看到因素重新排序。 有時候是這樣的。 我希望該因素能夠保持其價值(顯然)。 它們都設置為NA。
我懷疑這是因為d[names(d) == my.column]
是一個小問題,而不是一個因素。 但是,為什么因子水平發生變化? 而我該如何深入討論並抓住因素呢?
對於多列,我們可以在mutate_at
指定
library(dplyr)
d %>%
mutate_at(vars(my.column),
list(~ factor(., levels = proper.order, exclude = NULL)))
或者使用fct_relevel
的forcats
library(forcats)
d %>%
mutate_at(vars(my.column), list(~ fct_relevel(., proper.order)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.