다음 데이터 프레임이 있습니다.
x <- read.table(text = " id1 id2 val1 val2
1 a x 1 9
2 a x 2 4
3 a y 3 5
4 a y 4 9
5 b x 1 7
6 b y 4 4
7 b x 3 9
8 b y 2 8", header = TRUE)
id1과 id2로 그룹화 된 val1과 val2의 평균을 계산하고 동시에 각 id1-id2 조합의 행 수를 계산하고 싶습니다. 각 계산을 개별적으로 수행 할 수 있습니다.
# calculate mean
aggregate(. ~ id1 + id2, data = x, FUN = mean)
# count rows
aggregate(. ~ id1 + id2, data = x, FUN = length)
한 번의 호출로 두 가지 계산을 모두 수행하기 위해
do.call("rbind", aggregate(. ~ id1 + id2, data = x, FUN = function(x) data.frame(m = mean(x), n = length(x))))
그러나 경고와 함께 잘못된 출력이 표시됩니다.
# m n
# id1 1 2
# id2 1 1
# 1.5 2
# 2 2
# 3.5 2
# 3 2
# 6.5 2
# 8 2
# 7 2
# 6 2
# Warning message:
# In rbind(id1 = c(1L, 2L, 1L, 2L), id2 = c(1L, 1L, 2L, 2L), val1 = list( :
# number of columns of result is not a multiple of vector length (arg 1)
plyr 패키지를 사용할 수 있지만 데이터 세트의 크기가 커지면 데이터 세트가 상당히 크고 plyr가 매우 느립니다 (거의 사용 불가능).
aggregate
또는 다른 함수를 사용하여 한 번의 호출로 여러 계산을 수행 하려면 어떻게 해야합니까?
aggregate
답변 외에도by
및tapply
.