Programing

data.frame Group By 열

lottogame 2020. 12. 4. 07:42
반응형

data.frame Group By 열


이 질문에 이미 답변이 있습니다.

데이터 프레임 DF가 있습니다.

DF는 다음과 같습니다.

  A B
1 1 2
2 1 3
3 2 3
4 3 5
5 3 6 

이제 A 열로 행을 결합하고 B 열의 합계를 얻고 싶습니다.

예를 들면 :

  A B
1 1 5
2 2 3
3 3 11

현재 sqldf 함수와 함께 SQL 쿼리를 사용하여이 작업을 수행하고 있습니다. 그러나 어떤 이유로 그것은 매우 느립니다. 더 편리한 방법이 있습니까? for 루프를 사용하여 수동으로도 할 수 있지만 다시 느립니다. 내 SQL 쿼리는 "Select A, Count (B) from DF group by A"입니다.

일반적으로 벡터화 된 작업을 사용하지 않고 for 루프를 사용할 때마다 단일 절차의 경우에도 성능이 매우 느립니다.


이것은 일반적인 질문입니다. 기본에서 찾고있는 옵션은 aggregate입니다. data.frame"mydf"라고 가정하면 다음을 사용할 수 있습니다.

> aggregate(B ~ A, mydf, sum)
  A  B
1 1  5
2 2  3
3 3 11

또한 "data.table"패키지를 살펴 보는 것이 좋습니다.

> library(data.table)
> DT <- data.table(mydf)
> DT[, sum(B), by = A]
   A V1
1: 1  5
2: 2  3
3: 3 11

사용 dplyr:

require(dplyr)    
df <- data.frame(A = c(1, 1, 2, 3, 3), B = c(2, 3, 3, 5, 6))
df %>% group_by(A) %>% summarise(B = sum(B))

## Source: local data frame [3 x 2]
## 
##   A  B
## 1 1  5
## 2 2  3
## 3 3 11

와 함께 sqldf:

library(sqldf)
sqldf('SELECT A, SUM(B) AS B FROM df GROUP BY A')

나는 plyr패키지를 보는 것이 좋습니다 . data.table이나 다른 패키지만큼 빠르지 않을 수도 있지만, 특히 R로 시작하고 데이터를 조작해야 할 때 매우 유익합니다.

> DF <- data.frame(A = c("1", "1", "2", "3", "3"), B = c(2, 3, 3, 5, 6))
> library(plyr)
> DF.sum <- ddply(DF, c("A"), summarize, B = sum(B))
> DF.sum
  A  B
1 1  5
2 2  3
3 3 11

require(reshape2)

T <- melt(df, id = c("A"))

T <- dcast(T, A ~ variable, sum)

집합체에 비해 정확한 이점이 확실하지 않습니다.

참고 URL : https://stackoverflow.com/questions/18799901/data-frame-group-by-column

반응형