R 打破吸毒成癖

R 打破吸毒成癖,r,aggregation,tapply,R,Aggregation,Tapply,我通过玩弄学会了R,我开始认为我滥用了tapply函数。是否有更好的方法来执行以下操作?诚然,它们是有效的,但随着它们变得越来越复杂,我想知道我是否失去了更好的选择。我在这里寻求一些批评: tapply(var1, list(fac1, fac2), mean, na.rm=T) tapply(var1, fac1, sum, na.rm=T) / tapply(var2, fac1, sum, na.rm=T) cumsum(tapply(var1, fac1, sum, na.rm=T)

我通过玩弄学会了R,我开始认为我滥用了tapply函数。是否有更好的方法来执行以下操作?诚然,它们是有效的,但随着它们变得越来越复杂,我想知道我是否失去了更好的选择。我在这里寻求一些批评:

tapply(var1, list(fac1, fac2), mean, na.rm=T)

tapply(var1, fac1, sum, na.rm=T) / tapply(var2, fac1, sum, na.rm=T)

cumsum(tapply(var1, fac1, sum, na.rm=T)) / sum(var1)
更新:以下是一些示例数据

     var1    var2 fac1           fac2
1      NA  275.54   10      (266,326]
2      NA  565.89   10      (552,818]
3      NA  815.41    6      (552,818]
4      NA  281.77    6      (266,326]
5      NA  640.24   NA      (552,818]
6      NA   78.42   NA     [78.4,266]
7      NA 1027.06   NA (818,1.55e+03]
8      NA  355.20   NA      (326,552]
9      NA  464.52   NA      (326,552]
10     NA 1397.11   10 (818,1.55e+03]
11     NA  229.82   NA     [78.4,266]
12     NA  542.77   NA      (326,552]
13     NA  829.32   NA (818,1.55e+03]
14     NA  284.78   NA      (266,326]
15     NA  194.97   10     [78.4,266]
16     NA  672.55    8      (552,818]
17     NA  348.01   10      (326,552]
18     NA 1550.79    9 (818,1.55e+03]
19 101.98  101.98    4     [78.4,266]
20     NA  292.80    6      (266,326]
更新数据转储:

structure(list(var1 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, 101.98, NA), var2 = c(275.54, 
565.89, 815.41, 281.77, 640.24, 78.42, 1027.06, 355.2, 464.52, 
1397.11, 229.82, 542.77, 829.32, 284.78, 194.97, 672.55, 348.01, 
1550.79, 101.98, 292.8), fac1 = c(10L, 10L, 6L, 6L, NA, NA, NA, 
NA, NA, 10L, NA, NA, NA, NA, 10L, 8L, 10L, 9L, 4L, 6L), fac2 = structure(c(2L, 
4L, 4L, 2L, 4L, 1L, 5L, 3L, 3L, 5L, 1L, 3L, 5L, 2L, 1L, 4L, 3L, 
5L, 1L, 2L), .Label = c("[78.4,266]", "(266,326]", "(326,552]", 
"(552,818]", "(818,1.55e+03]"), class = "factor")), .Names = c("var1", 
"var2", "fac1", "fac2"), row.names = c(NA, -20L), class = "data.frame")

对于第1部分,我更喜欢
aggregate
,因为它将数据保存为更像R的每行一次观察的格式


aggregate(var1,list(fac1,fac2),mean,na.rm=T)

作为注释:虽然这些都是清晰的示例,但如果您提供了var1,fac1等的示例数据,会更容易提供帮助。这一点很好。建议:您可以使用dput()函数提取样本数据的结构,然后将结果粘贴到这里吗?另一个想法是使用R:?数据集附带的“数据集”包中的一些东西。那么复制就不需要额外的工作了。我知道如果我连这个例子都做不好,我已经有麻烦了。。。添加了示例df的dput。请记住,在这个场景中,我毫不掩饰地使用attach()获取数据。