Re: [問題] ?aggregate example問題

看板R_Language作者 (天)時間10年前 (2015/09/08 21:01), 10年前編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
# 我固定seed,方便可以重生例子 set.seed(100) testDF = data.frame(values = sample(1:3, 10, TRUE), by1 = sample(LETTERS[1:5], 10, TRUE)) testDF # values by1 # 1 1 D # 2 1 E # 3 2 B # 4 1 B # 5 2 D # 6 2 D # 7 3 B # 8 2 B # 9 2 B # 10 1 D 如果我要計算屬於各類別的個數: aggregate(testDF, by = list(testDF$by1), FUN = length) # Group.1 values by1 # 1 B 5 5 # 2 D 4 4 # 3 E 1 1 但是寫這樣會把by1自己也算進來,可以考慮這樣寫: aggregate(. ~ by1, data=testDF, FUN = length) # by1 values # 1 B 5 # 2 D 4 # 3 E 1 例子的by1, by2要另立變數,是為了當引言,介紹這種方式。 如果我要計算屬於各類別的平均值: aggregate(testDF$values, by = list(testDF$by1), FUN = mean) # Group.1 x # 1 B 2.0 # 2 D 1.5 # 3 E 1.0 這個方法是為了避免by1都是字串而報錯 所以在aggregate的時候要把values另外拉出來 下面有更好的寫法: aggregate(. ~ by1, data=testDF, FUN = mean) # by1 values # 1 B 2.0 # 2 D 1.5 # 3 E 1.0 如果看懂了簡單的例子 再用一個複雜一點的,這時候看應該就簡單很多了: set.seed(100) testDF = data.frame(values = sample(1:3, 10, TRUE), values_2 = sample(1:4, 10, TRUE), by1 = sample(LETTERS[1:3], 10, TRUE), by2 = sample(LETTERS[1:3], 10, TRUE)) # values values_2 by1 by2 # 1 1 3 B B # 2 1 4 C C # 3 2 2 B B # 4 1 2 C C # 5 2 4 B C # 6 2 3 A C # 7 3 1 C A # 8 2 2 C B # 9 2 2 B C # 10 1 3 A A aggregate(. ~ by1 + by2, data=testDF, FUN = length) # by1 by2 values values_2 # 1 A A 1 1 # 2 C A 1 1 # 3 B B 2 2 # 4 C B 1 1 # 5 A C 1 1 # 6 B C 2 2 # 7 C C 2 2 aggregate(. ~ by1 + by2, data=testDF, FUN = mean) # by1 by2 values values_2 # 1 A A 1.0 3.0 # 2 C A 3.0 1.0 # 3 B B 1.5 2.5 # 4 C B 2.0 2.0 # 5 A C 2.0 3.0 # 6 B C 2.0 3.0 # 7 C C 1.0 3.0 建議可以直接學dplyr 可以參考拙作 #1LhpJCfB (R_Language) aggregate其實在dplyr就是group_by + summarise 最後補充一下: 不知道你有沒有學過tapply 其實aggregate是tapply的強化板 像是第一個例子 計算長度 tapply(testDF$values, list(testDF$by1), length) # B D E # 5 4 1 差別只是tapply出來是向量,aggregate是data.frame 而且aggregate可以直接用公式做計算,比較快 ※ 引述《buzz20374 ()》之銘言: : [問題類型]: : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : [軟體熟悉度]: : 新手(沒寫過程式,R 是我的第一次) : [問題敘述]: : ?aggregate 中的一個example : ## example with character variables and NAs : testDF <- data.frame(v1 = c(1,3,5,7,8,3,5,NA,4,5,7,9), : v2 = c(11,33,55,77,88,33,55,NA,44,55,77,99) ) : by1 <- c("red", "blue", 1, 2, NA, "big", 1, 2, "red", 1, NA, 12) : by2 <- c("wet", "dry", 99, 95, NA, "damp", 95, 99, "red", 99, NA, NA) : aggregate(x = testDF, by = list(by1, by2), FUN = "mean") : 我研究了很久,還是想不懂。 : http://imgur.com/GziYRRP
: 像是 FUN="mean" 到底作用了甚麼? : 最後的執行的結果也看不懂。(?aggregate前面的例子會) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.248.8.123 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1441717300.A.64F.html

09/08 21:02, , 1F
研究中,謝謝!
09/08 21:02, 1F
※ 編輯: celestialgod (111.248.8.123), 09/08/2015 21:14:30
文章代碼(AID): #1LxjmqPF (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1LxjmqPF (R_Language)