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/cn.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