精華區beta R_Language 關於我們 聯絡資訊
[問題類型]: 程式詢問(我想用R 做某件事情,但我不知道怎麼用R寫出來) [軟體熟悉度]: 超級新手(沒寫過程式,R 是我的第一次) [問題敘述]: S.L S.W P.L P.W Species 49.0 30.0 14.000 2.0 setosa 5.6 2.9 3.600 1.3 versicolor 6.8 3.2 5.900 2.3 virginica 我想請問 如何挑出大於10的數值把它除於10 以及如何把每個數值統一顯示小數點後一位 謝謝各位大大 (手機排版,不知道會不會亂掉) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.10.6.226 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1492870608.A.4CF.html ※ 編輯: smallpigpi (39.10.6.226), 04/22/2017 22:19:31 ※ 編輯: smallpigpi (39.10.6.226), 04/22/2017 22:20:58
clansoda: 第一個問題如果是data.table的格式的話 04/22 22:43
clansoda: dat[S.L >= 10, S.L := S.L / 10] 04/22 22:44
andrew43: 學一下怎麼用 subset 04/22 22:46
clansoda: 太久沒用data.frame我還真的忘記怎麼subset了XDD 04/22 22:51
clansoda: 我看了一下,應該是dat[dat$S.L >= 10, dat$S.L] / 10 -> 04/22 22:56
clansoda: dat[dat$S.L, dat$S.L] 04/22 22:56
clansoda: 不知道我這樣對不對,很久沒做了 有錯跟我說一下 04/22 22:56
smallpigpi: C大,A大那句應該是在跟我說XD 04/22 23:18
smallpigpi: 謝謝A大的提點,也謝謝C大幫忙,雖然我跑不出來,應 04/22 23:18
smallpigpi: 該是因為我是用data.frame 04/22 23:18
smallpigpi: http://i.imgur.com/fKKxNxd.jpg 04/22 23:18
smallpigpi: 不知為何我的data.table啟動不了,看起來是下載成功了 04/22 23:19
smallpigpi: http://i.imgur.com/SuIKbR1.jpg 04/22 23:19
clansoda: 看不太出來你的error message出了啥問題 04/23 00:03
clansoda: 噢Sor, 我的那個寫錯了 後面assign的那邊 你也要給他 04/23 00:05
clansoda: 大於10的指令 所以後面的assign是dat[dat$S.L >=10, 04/23 00:05
clansoda: dat$S.L] 04/23 00:06
clansoda: 這樣跑跑看呢? 04/23 00:06
smallpigpi: 好像還是一樣_(:3 」∠)_ 04/23 00:13
smallpigpi: http://i.imgur.com/jUlqUcP.jpg 04/23 00:13
> -------------------------------------------------------------------------- < 作者: celestialgod (天) 看板: R_Language 標題: Re: [問題] 挑出某些條件的數值做整理 時間: Sat Apr 22 23:06:35 2017 ※ 引述《smallpigpi (一勺子)》之銘言: : [問題類型]: : 程式詢問(我想用R 做某件事情,但我不知道怎麼用R寫出來) : [軟體熟悉度]: : 超級新手(沒寫過程式,R 是我的第一次) : [問題敘述]: : S.L S.W P.L P.W Species : 49.0 30.0 14.000 2.0 setosa : 5.6 2.9 3.600 1.3 versicolor : 6.8 3.2 5.900 2.3 virginica : 我想請問 : 如何挑出大於10的數值把它除於10 : 以及如何把每個數值統一顯示小數點後一位 : 謝謝各位大大 : (手機排版,不知道會不會亂掉) # data.table做法: library(data.table) irisDT <- data.table(iris) irisDT[ , lapply(.SD, function(x){ if (is.numeric(x)) { ifelse(x > 10, x / 10, x) } else return(x)})] # dplyr做法: library(dplyr) irisDT %>% mutate_if(is.numeric, funs(ifelse(. > 10, . / 10, .))) # base函數解法: evalExpr <- lapply(names(irisDT)[sapply(irisDT, is.numeric)], function(x) bquote(ifelse(.(as.symbol(x)) > 10, .(as.symbol(x)) / 10, .(as.symbol(x))))) do.call(function(...) transform(irisDT, ...), evalExpr) 看一下這篇: https://www.ptt.cc/bbs/R_Language/M.1492181442.A.5B4.html 統一顯示小數點後一位的話: print(iris, digits = 2) -- R資料整理套件系列文: magrittr #1LhSWhpH (R_Language) https://goo.gl/72l1m9 data.table #1LhW7Tvj (R_Language) https://goo.gl/PZa6Ue dplyr(上.下) #1LhpJCfB,#1Lhw8b-s (R_Language) https://goo.gl/I5xX9b tidyr #1Liqls1R (R_Language) https://goo.gl/i7yzAz pipeR #1NXESRm5 (R_Language) https://goo.gl/zRUISx -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.224.97.253 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1492873599.A.0AD.html ※ 編輯: celestialgod (125.224.97.253), 04/22/2017 23:10:14
smallpigpi: 謝謝大大指點,不過不知為何我啟動不了data.table 04/22 23:26
smallpigpi: http://i.imgur.com/X1iF3SD.jpg 04/22 23:26
smallpigpi: 我原本是使用data.frame處理,也只學到這裡XD 04/22 23:29
smallpigpi: 除了data.table其它方法大概還啃不下。 04/22 23:29
smallpigpi: 還是非常感謝 04/22 23:29
clansoda: 額,你知道有些library不是內建的嗎 04/22 23:57
clansoda: 你得install.packages("data.table") 04/22 23:58
smallpigpi: 知道XD,圖片裡第一行有下載一次 04/23 00:04
clansoda: 我看到了 04/23 00:06