精華區beta R_Language 關於我們 聯絡資訊
如題 在做資料分析的時候 會常遇到需要 as.factor 或是 as.numeric的操作 比如說我的column總共有26行 第一行叫a 第二行叫b 依此類推 如果我想要把第一到第10行都轉成numeric 我只好笨笨的 df$a<- as.numeric(df$a) df$b<- as.numeric(df$b) df$c<- as.numeric(df$c) 像這樣做實在超笨的 有沒有可能利用APPLY或是其他方式 讓我一次性的把指定的行數 給他一個數列 例如 c(1,4,5,6,7,8) 就自動把指定的行數轉成as.numeric 或是as.factor的結果 還是我必須要自己寫一個函數呢QQ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.91.75.186 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1582540819.A.2BB.html
andrew43: sapply(df[, c(1,4,5,6,7,8)], as.numeric) 再cbind回df 02/24 19:12
andrew43: 之後若想刪掉舊的就只是 df[, -1*c(1,4,...)] 02/24 19:16
TreeMan: 直接df[c(1,4,5,6,7,8)] <- sapply(...) 就不用cbind了 02/24 19:37
andrew43: 對。謝謝。 02/24 19:50
empireisme: 推 02/25 01:19
> -------------------------------------------------------------------------- < 作者: celestialgod (天) 看板: R_Language 標題: Re: [問題]常見的重複操作as.numeric用apply可否實現 時間: Tue Feb 25 11:35:40 2020 ※ 引述《empireisme (empireisme)》之銘言: : 如題 : 在做資料分析的時候 會常遇到需要 as.factor 或是 as.numeric的操作 : 比如說我的column總共有26行 : 第一行叫a 第二行叫b 依此類推 : 如果我想要把第一到第10行都轉成numeric : 我只好笨笨的 : df$a<- as.numeric(df$a) : df$b<- as.numeric(df$b) : df$c<- as.numeric(df$c) : 像這樣做實在超笨的 : 有沒有可能利用APPLY或是其他方式 : 讓我一次性的把指定的行數 給他一個數列 例如 c(1,4,5,6,7,8) : 就自動把指定的行數轉成as.numeric 或是as.factor的結果 : 還是我必須要自己寫一個函數呢QQ 我會建議用data.table,像是下面這樣做 library(data.table) DT <- data.table(CO2) str(DT) # Classes ‘data.table’ and 'data.frame': 84 obs. of 5 variables: # $ Plant : Ord.factor w/ 12 levels "Qn1"<"Qn2"<"Qn3"<..: 1 1 1 1 1 1 1 2 2 2 ... # $ Type : Factor w/ 2 levels "Quebec","Mississippi": 1 1 1 1 1 1 1 1 1 1 ... # $ Treatment: Factor w/ 2 levels "nonchilled","chilled": 1 1 1 1 1 1 1 1 1 1 ... # $ conc : num 95 175 250 350 500 675 1000 95 175 250 ... # $ uptake : num 16 30.4 34.8 37.2 35.3 39.2 39.7 13.6 27.3 37.1 ... # - attr(*, ".internal.selfref")=<externalptr> to_char_cols <- c("Plant", "Type", "Treatment") DT[ , eval(to_char_cols) := lapply(.SD, as.character), .SDcols = to_char_cols] str(DT) # Classes ‘data.table’ and 'data.frame': 84 obs. of 5 variables: # $ Plant : chr "Qn1" "Qn1" "Qn1" "Qn1" ... # $ Type : chr "Quebec" "Quebec" "Quebec" "Quebec" ... # $ Treatment: chr "nonchilled" "nonchilled" "nonchilled" "nonchilled" ... # $ conc : num 95 175 250 350 500 675 1000 95 175 250 ... # $ uptake : num 16 30.4 34.8 37.2 35.3 39.2 39.7 13.6 27.3 37.1 ... # - attr(*, ".internal.selfref")=<externalptr> -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.170.73 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1582601742.A.DE4.html