簡體   English   中英

在數據框中使用兩個因子名稱和水平順序的變量來更改R中的因子水平

[英]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_relevelforcats

library(forcats)
d %>%
    mutate_at(vars(my.column), list(~ fct_relevel(., proper.order))) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM