一周前,我会手动完成此操作:按组分组数据到新数据帧 . 对于每个数据帧计算意味着每个变量,然后是rbind . 非常笨重......
现在我已经了解了 split
和 plyr
,我想必须有一种更简单的方法来使用这些工具 . 请不要证明我错了 .
test_data <- data.frame(cbind(
var0 = rnorm(100),
var1 = rnorm(100,1),
var2 = rnorm(100,2),
var3 = rnorm(100,3),
var4 = rnorm(100,4),
group = sample(letters[1:10],100,replace=T),
year = sample(c(2007,2009),100, replace=T)))
test_data$var1 <- as.numeric(as.character(test_data$var1))
test_data$var2 <- as.numeric(as.character(test_data$var2))
test_data$var3 <- as.numeric(as.character(test_data$var3))
test_data$var4 <- as.numeric(as.character(test_data$var4))
我正在玩两个 ddply
但是我不能产生我想要的东西 - 即这样的表,对于每个组
group a |2007|2009|
________|____|____|
var1 | xx | xx |
var2 | xx | xx |
etc. | etc| ect|
也许 d_ply
和一些 odfweave
输出将起作用 . 非常感谢投入 .
附:我注意到data.frame将rnorm转换为data.frame中的因子?我怎么能避免这种情况 - 我(rnorm(100)不起作用所以我必须像上面那样转换成数字
6 回答
给定结果所需的格式,重塑包将比plyr更有效 .
结果看起来像这样
您可以使用
by()
执行此操作 . 首先设置一些数据:使用
by()
:你仍然需要为你的 table 重新格式化它,但它确实在一行中给你答案的要点 .
编辑:可以通过进一步处理
您可以使用
dimnames
更多:编辑:有了这个,我们可以为结果创建一个
data.frame
,而不需要仅使用基R的外部包:EDIT: 我写了以下内容然后意识到蒂埃里已经写了几乎完全相同的答案 . 我莫名其妙地忽略了他的回答 . 所以,如果你喜欢这个答案,请投反对票 . 因为我花时间打字,所以我要继续发布 .
这种东西消耗的时间比我希望的多得多!这是使用Hadley Wickham的reshape package的解决方案 . 这个例子没有你提出的问题,因为结果都在一个大表中,而不是每个组的表 .
你使用数值显示为因素的麻烦是因为你使用了cbind并且所有东西都被撞到了一个类型字符的矩阵中 . 很酷的是你不需要带有data.frame的cbind .
这导致以下结果:
我写了blog post recently关于做与plyr类似的事情 . 我应该做一个关于如何使用reshape包做同样事情的第2部分 . plyr和reshape都是由Hadley Wickham编写的,是疯狂有用的工具 .
它可以用基本的R函数完成:
说明:
提示:生成随机数据时,可用于定义观察次数 . 更改样本大小更容易,
首先按组拆分行索引1:nrow(test_data),
然后为每个组提供变量
对于固定组和变量做每年变量的简单tapply returnig均值 .
在R 2.9.2中,结果是:
随着我的随机数据,“a”组存在问题 - 仅存在2007个案例 . 如果年份是因素(2007和2009年水平),那么结果可能看起来更好(每年你会有两行,但可能有NA) .
结果是列表,因此您可以使用lapply来例如 . 转换为乳胶表,html表,在屏幕上进行转置等 .
首先,你不需要使用cbind,这就是为什么一切都是一个因素 . 这有效:
其次,最佳做法是在变量名中使用"."而不是"_" . See the google style guide(例如) .
最后,您可以使用Rigroup包;它非常快 . 将igroupMeans()函数与apply结合使用,并设置索引
i=as.factor(paste(test_data$group,test_data$year,sep=""))
. 我稍后会尝试包含一个这样的例子 .EDIT 6/9/2017
Rigroup包已从CRAN中删除 . 见this
首先做一个简单的聚合来总结它 .
这使得像这样的data.frame ......
这本身就非常接近你想要的 . 你现在可以按组拆分它 .
好的,所以这不是它,但如果你真的想,我们可以改进输出 .
这没有你所有的表格格式,但它的组织与你描述的完全一致,并且非常接近 . 最后一步你可以很喜欢你喜欢的方式 .
这是匹配所请求组织的唯一答案,这是在R. BTW中最快的方式 . 我不打算做最后一步,只是坚持聚合的第一个输出...或者也许分裂 .