R_Language 板


LINE

# 我固定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://webptt.com/m.aspx?n=bbs/R_Language/M.1441717300.A.64F.html
1F:推 buzz20374: 研究中,謝謝! 09/08 21:02
※ 編輯: celestialgod (111.248.8.123), 09/08/2015 21:14:30







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP