루벤스는 정확하고 당신이 사용하고자하는 경우 aggregate
대신 apply
인데, 오늘의 이전 게시물에서와 마찬가지로 aggregate
표현에 관심이 있으시면 tapply
을 사용할 수 있습니다.
What is the meaning of ~ in aggregate?
x=iris[,1:4]
names(x)<-c("x1","x2","x3","x4")
aggregate(x1+x2+x3+x4~x1,FUN=sum,data=x)
tapply((x$x1 + x$x2 + x$x3 + x$x4), x$x1, sum)
편집 sapply
및 lapply
가 동일한 바로 위의 tapply
및 aggregate
같은 대답뿐만 아니라 rapply
, vapply
과 포맷 tapply
과 by
기능을 제공하기 위해 DWIN의 대답에서 수정 추가 :
with(x, sapply(split((x1 + x2 + x3 + x4), x1), sum))
with(x, lapply(split((x1 + x2 + x3 + x4), x1), sum))
with(x, rapply(split((x1 + x2 + x3 + x4), x1), sum))
with(x, tapply( (x1 + x2 + x3 + x4), x1 , sum))
with(x, vapply(split((x1 + x2 + x3 + x4), x1), sum, FUN.VALUE=1))
with(x, by((x1 + x2 + x3 + x4), x1, sum))
mapply
으로 같은 대답을 얻는 방법을 알아 냈습니다. 음, 여기에 한 가지 방법이지만, 꽤 바보 :
tapply(apply((x[,1:4]),1,sum),x$x1,sum)
:
tapply(mapply(sum, x$x1 , x$x2 , x$x3 , x$x4), x$x1, sum)
마지막으로, 여기에 위의 다른 라인에 의해 주어진 같은 답을 얻기 위해서 (tapply
내부) apply
를 사용하는 방법입니다
마지막으로 한 가지는, aggregate
이 게시글에 apply
문과 동일한 대답을 반환하도록 할 수 있습니다. 그러나 각 행을 apply
문으로 요약하면됩니다.
x=iris[,1:4]
names(x)<-c("x1","x2","x3","x4")
apply.sums <- transform(x,"sum"=apply(x,MARGIN=1,FUN=sum))
my.factor <- seq(1, nrow(x))
ag.sums <- aggregate(x1+x2+x3+x4~my.factor,FUN=sum,data=x)
round(ag.sums[,2],2) == round(apply.sums[,5],2)
당신이 바로, 그 반대를 의미한다 :과 같이 설정 아이리스 데이터의 각 행에 대해 별도의 그룹은 따라서 사고로 '트릭'
aggregate
해야 할 것입니까? – Rubens이것은 전혀 이해가되지 않습니다. 적용하고 집계하는 것은 완전히 다른 일을합니다. – joran
@joran에 동의합니다. 당신은 당신이 일반적으로 성취하고자하는 것을 분명히하기 위해 질문을 재 형성해야합니다. 지금 당장은 둥근 구멍에 사각 못을 끼워 넣는 법을 묻는 것처럼 들립니다. 단지'apply'에 대한 호출을 피하고자한다면, 대안은'sum = rowSums (x)'입니다. –