看板 R_Language 關於我們 聯絡資訊
有一些小細節你可以留意一下。 a$X1 和 a["X1"] 和 a[X1] 三者是不同的。 a$X1 同於 a[["X1"]] 回傳的是向量; a["X1"] 回傳的是 data frame; a[X1] 要預先定義 X1 的值才有作用(這是實際你發生的問題)。 綜合以上,改成: reorder_level <- function(df, col_name) { df[col_name] <- factor(df[[col_name]], levels = mixedsort(unique(df[[col_name]]))) df } b <- a %>% reorder_level("X1") b b$X1 重點在於雙重中括號和 "X1" 而不是 X1 ※ 引述《tus (new life)》之銘言: : [問題類型]: : 程式諮詢(我想用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! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.125.45.28 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1515123450.A.F3E.html ※ 編輯: andrew43 (59.125.45.28), 01/05/2018 11:38:54
tus: 感謝 以前都沒注意過這些細節 01/05 12:01