[r] 각 그룹 내 행 수 계산

데이터 프레임이 있고 각 그룹 내의 행 수를 계산하고 싶습니다. aggregate다음과 같이 데이터를 합산 하기 위해 함수를 다시 사용합니다 .

df2 <- aggregate(x ~ Year + Month, data = df1, sum)

이제 관측 값을 세고 싶지만 .NET에 대한 적절한 인수를 찾을 수없는 것 같습니다 FUN. 직관적으로 다음과 같을 것이라고 생각했습니다.

df2 <- aggregate(x ~ Year + Month, data = df1, count)

그러나 그런 행운은 없습니다.

어떤 아이디어?


일부 장난감 데이터 :

set.seed(2)
df1 <- data.frame(x = 1:20,
                  Year = sample(2012:2014, 20, replace = TRUE),
                  Month = sample(month.abb[1:3], 20, replace = TRUE))



답변

현재 모범 사례 (tidyverse)는 다음과 같습니다.

require(dplyr)
df1 %>% count(Year, Month)


답변

@Joshua의 제안에 따라 다음 dfYear= 2007 및 Month= Nov (열이라고 가정) 인 데이터 프레임 의 관측치 수를 계산할 수있는 한 가지 방법입니다 .

nrow(df[,df$YEAR == 2007 & df$Month == "Nov"])

aggregate@GregSnow를 따라 :

aggregate(x ~ Year + Month, data = df, FUN = length)


답변

dplyr패키지는 count/ tally명령 또는 n()함수를 사용 하여이를 수행합니다 .

첫째, 일부 데이터 :

df <- data.frame(x = rep(1:6, rep(c(1, 2, 3), 2)), year = 1993:2004, month = c(1, 1:11))

이제 카운트 :

library(dplyr)
count(df, year, month)
#piping
df %>% count(year, month)

파이프와 n()기능이 있는 약간 더 긴 버전을 사용할 수도 있습니다 .

df %>%
  group_by(year, month) %>%
  summarise(number = n())

또는 tally기능 :

df %>%
  group_by(year, month) %>%
  tally()


답변

data.table해결책이 없는 오래된 질문 . 그래서 여기 간다 …

사용 .N

library(data.table)
DT <- data.table(df)
DT[, .N, by = list(year, month)]


답변

사용하는 간단한 옵션 은 하위 집합의 벡터 길이를 제공 aggregate하는 length함수입니다. 때로는 좀 더 강력하게 function(x) sum( !is.na(x) ).


답변

Count각 행에 대해 값이 1 인 새 변수 를 만듭니다 .

df1["Count"] <-1

그런 다음 Count열로 합산하여 데이터 프레임을 집계합니다 .

df2 <- aggregate(df1[c("Count")], by=list(Year=df1$Year, Month=df1$Month), FUN=sum, na.rm=TRUE)


답변

aggregate()이 경우 함수에 대한 대안 은 table()with 가 될 것 입니다 as.data.frame(). 이것은 또한 어떤 연도와 월의 조합이 0 번 발생과 연관되어 있는지를 나타냅니다.

df<-data.frame(x=rep(1:6,rep(c(1,2,3),2)),year=1993:2004,month=c(1,1:11))

myAns<-as.data.frame(table(df[,c("year","month")]))

그리고 제로 발생 조합없이

myAns[which(myAns$Freq>0),]