我有一个数据框,我想在其某些列值上应用聚合函数,并通过自定义键对它们进行分组。
我有一个自定义函数,它将数据帧的一行作为输入并生成密钥。如何调用aggregate
函数(或sapply
,tapply
...)
基本上是这样的:
GetRowKey <- function(row_value) { GetRowKey = row_value[1] % 5 }
aggregate(my_data, GetRowKey, FUN=max)
使用这样的输入:
1,1
6,2
1,3
7,3
12,5
11,8
我会得到以下结果:
1,8
2,5
答案 0 :(得分:2)
在R中,您应该使用%%
,而不仅仅是%
个符号。在我看来,你真的不需要这里的自定义功能。将函数体直接替换为aggregate()
函数更容易。
> d <- read.table(text = "1,1
6,2
1,3
7,3
12,5
11,8", sep = ",")
> aggregate(d[[2]], d[1] %% 5, max)
# V1 x
# 1 1 8
# 2 2 5
按原样,您的自定义函数不会返回任何内容。如果您要将其调整为
> GetRowKey <- function(row_value) { row_value[1] %% 5 }
我们可以在aggregate()
中使用它,如下所示,
> aggregate(dat[[2]], GetRowKey(dat[1]), max)
V1 x
1 1 8
2 2 5