聚合 - 在用户定义的函数中使用多个变量
Aggregate - Use more than one variable in user defined function
我正在处理大型数据集并使用 aggregate() 函数进行一些计算。
这次我需要按两个不同的列进行分组,并且为了我的计算,我需要一个用户定义的函数,该函数也使用 data.frame 的两列。这就是我被困的地方。
这是一个示例数据集:
dat <- data.frame(Kat = c("a","b","c","a","c","b","a","c"),
Sex = c("M","F","F","F","M","M","F","M"),
Val1 = c(1,2,3,4,5,6,7,8)*10,
Val2 = c(2,6,3,3,1,4,7,4))
> dat
Kat Sex Val1 Val2
a M 10 2
b F 20 6
c F 30 3
a F 40 3
c M 50 1
b M 60 4
a F 70 7
c M 80 4
用户自定义函数示例:
sum(Val1 * Val2) # but grouped by Kat and Sex
我试过这个:
aggregate((dat$Val1),
by = list(dat$Kat, dat$Sex),
function(x, y = dat$Val2){sum(x*y)})
输出:
Group.1 Group.2 x
a F 1710
b F 600
c F 900
a M 300
b M 1800
c M 2010
但我的预期输出是:
Group.1 Group.2 x
a F 610
b F 120
c F 90
a M 20
b M 240
c M 370
有什么方法可以用 aggregate() 来做到这一点吗?
提前致谢!
正如@jogo 所建议的:
aggregate(Val1 * Val2 ~ Kat + Sex, FUN = sum, data = dat)
或 tidyverse
风格
library(dplyr)
dat %>%
group_by(Kat, Sex) %>%
summarize(sum(Val1 * Val2))
或 data.table
library(data.table)
setDT(dat)
dat[ , sum(Val1 * Val2), by = list(Kat, Sex)]
我正在处理大型数据集并使用 aggregate() 函数进行一些计算。
这次我需要按两个不同的列进行分组,并且为了我的计算,我需要一个用户定义的函数,该函数也使用 data.frame 的两列。这就是我被困的地方。
这是一个示例数据集:
dat <- data.frame(Kat = c("a","b","c","a","c","b","a","c"),
Sex = c("M","F","F","F","M","M","F","M"),
Val1 = c(1,2,3,4,5,6,7,8)*10,
Val2 = c(2,6,3,3,1,4,7,4))
> dat
Kat Sex Val1 Val2
a M 10 2
b F 20 6
c F 30 3
a F 40 3
c M 50 1
b M 60 4
a F 70 7
c M 80 4
用户自定义函数示例:
sum(Val1 * Val2) # but grouped by Kat and Sex
我试过这个:
aggregate((dat$Val1),
by = list(dat$Kat, dat$Sex),
function(x, y = dat$Val2){sum(x*y)})
输出:
Group.1 Group.2 x
a F 1710
b F 600
c F 900
a M 300
b M 1800
c M 2010
但我的预期输出是:
Group.1 Group.2 x
a F 610
b F 120
c F 90
a M 20
b M 240
c M 370
有什么方法可以用 aggregate() 来做到这一点吗?
提前致谢!
正如@jogo 所建议的:
aggregate(Val1 * Val2 ~ Kat + Sex, FUN = sum, data = dat)
或 tidyverse
风格
library(dplyr)
dat %>%
group_by(Kat, Sex) %>%
summarize(sum(Val1 * Val2))
或 data.table
library(data.table)
setDT(dat)
dat[ , sum(Val1 * Val2), by = list(Kat, Sex)]