[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의 제안에 따라 다음 df
은 Year
= 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),]