这可能很基本,但我一直在试图弄清楚几天,并没有找到答案。基于按类别分组的多个列的用户自定义功能
我正在尝试根据“集水区”分组的两列“浓度”和“面积”来计算新的数量。我已经写了一个函数来计算每一行的浓度差异,以及按该流域面积比例归一化的最大面积的行,但它不适用于dplyr
或aggregate
(。然后返回一个列表
理想情况下,我想将列添加到数据帧或完全替代浓缩塔下面是数据框“利”:。
area catchment concentration
1 1 Yup 2.00000
2 10 Yup 40.50000
3 25 Yup 50.82031
4 35 Yup 50.00000
5 1 Nope 1.00000
6 10 Nope 5.00000
7 25 Nope 40.08333
8 35 Nope 38.00000
下面是函数:
lever <- function(data=lev, x=data[,"concentration"], y=data[,"area"]){
N= which.max(y)
L = (x - x[N]) * y/max(y)
return(L)}
这里是理想的结果:
area catchment concentration leverage
1 1 Yup 2.00000 -1.3714286
2 10 Yup 40.50000 -2.7142857
3 25 Yup 50.82031 0.5859375
4 35 Yup 50.00000 0.0000000
5 1 Nope 1.00000 -1.0571429
6 10 Nope 5.00000 -9.4285714
7 25 Nope 40.08333 1.4880952
8 35 Nope 38.00000 0.0000000
使用by
,我可以得到两份清单的结果对每个流域:
by(lev, lev$catchment, lever)
,但我想使用受到几个因素的分类多列的功能(例如,迄今除集水区),我得到
错误 '维度的数目不正确' 与doBy
和dplyr
。
如果您提供[可重现的示例],我们可以给出更好的答案(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5965451#5965451)。 –
感谢您对其进行编辑以使其具有重现性。下次我会做得更好:) – benjabiker