[問題類型]:
程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
[軟體熟悉度]:
使用者(已經有用R 做過不少作品)
[問題敘述]:
主要目的是重新排列一個factor level的順序
我的問題是 如何能用pipe的表示方法來做到
[程式範例]:
library(dplyr)
library(gtools)
rm(list = ls())
a <- data.frame(matrix(c("b_1","b_2","b_3","b_10","b_2",1,2,3,4,5), nrow = 5))
a$X1 <- as.character(a$X1)
levels(as.factor(a$X1)) # "b_1" "b_10" "b_2" "b_3"
# 假設 a 是我們的資料 因為原始資料的型態是 chr 所以我把 a$X1 轉成chr
# 這樣的level排序是 b_1, b_10, b_2, ...
# 但我想要的是 b_1, b_2, b_3, b_10
b <- a
b$X1 <- factor(b$X1, levels = mixedsort(unique(b$X1)))
levels(b$X1) # "b_1" "b_2", "b_3", "b_10"
# 所以我用了以上程式來改變level的順序
# 可是當我寫了一個reorder level的function 想使用pipe時 卻一直出現問題
reorder_level <- function(df, col_name){
df[col_name] <- factor(df[col_name], levels = mixedsort(unique(df[col_name])))
df
}
c <- a %>% reorder_level(X1)
# Error message 是
# Error in [.data.frame (df, col_name) : object 'X1' not found]
Thanks!