我想在我拥有的数据集上使用R进行一些统计。数据在列表中,并使用识别代码进行分组,此处在cat列
中给出cat AS_Year AS_Day As_Month EVENT_TYPE RESULT_TYPE REASON_TYPE OPERATOR_TYPE DATE_EVENT Day_Total
9002F100AS2 2009 14 2 9002 F 100 AS2 14-Feb-09 2
9002F123AS2 2009 14 2 9002 F 123 AS2 14-Feb-09 1
9008F0AS2 2009 14 2 9008 F 0 AS2 14-Feb-09 1
每天都有成千上万的这些代码,我想对每个代码进行一些统计。
我已经调查了一些事情,并尝试过玩
ddply(dtest,~group,summarise,mean=mean(Day_Total),sd=sd(Day_Total))
这给了我NA的平均值和s.d.这与我使用excel得到的结果并不相关。我还在一个更简单,更小的测试数据集和手段和s.d.上测试了这个。似乎没有问题。有没有人对如何使用这个有任何建议,或者我在某个地方遗漏了什么
答案 0 :(得分:2)
尝试非常有效的data.table
包
library(data.table)
setDT(dtest)[, list(mean = mean(Day_Total, na.rm = T),
sd=sd(Day_Total, na.rm = T)), by = cat]
或者如果您更愿意坚持使用plyr
系列,请尝试使用更新且更高效的dplyr
套餐
注意:首先通过plyr
detach("package:plyr", unload = TRUE)
library(dplyr)
dtest %>%
group_by(cat) %>%
summarise(mean = mean(Day_Total, na.rm = T), sd=sd(Day_Total, na.rm = T))
答案 1 :(得分:0)
我认为小组中的猫意味着你的oneliner。 可能是你的Day_Total或cat不是正确的类型吗? 是否可以在Day_Total列中存在一些不适用的值?
是什么给出了?
ddply(dtest,.(as.factor(cat)), summarise, mean=mean(Day_Total,na.rm=true),sd=sd(Day_Total,na.rm=true))