각 그룹 내 행 수 카운트
데이터 프레임이 있는데 각 그룹 내 행 수를 세고 싶습니다.나는 정기적으로 사용합니다.aggregate다음과 같이 데이터를 합하는 함수:
df2 <- aggregate(x ~ Year + Month, data = df1, sum)
이제, 저는 관측치를 세고 싶지만, 적절한 주장을 찾을 수 없는 것 같습니다.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데이터 프레임 위치Year2007년 및Month11월(열이라고 가정):
nrow(df[,df$YEAR == 2007 & df$Month == "Nov"])
와 함께aggregate다음 @GregSnow:
aggregate(x ~ Year + Month, data = df, FUN = length)
dplyr 패키지는 / 명령 또는 다음 기능을 tally사용하여 이 작업을 수행합니다.
첫째, 일부 데이터:
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()와 함께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),]
데이터에 누락된 월별 카운트를 0개 포함하려면 조금 사용할 수 있습니다.table마술.
data.frame(with(df1, table(Year, Month)))
예를 들어, 질문 df1의 toy data.frame에는 2014년 1월에 대한 관측치가 없습니다.
df1
x Year Month
1 1 2012 Feb
2 2 2014 Feb
3 3 2013 Mar
4 4 2012 Jan
5 5 2014 Feb
6 6 2014 Feb
7 7 2012 Jan
8 8 2014 Feb
9 9 2013 Mar
10 10 2013 Jan
11 11 2013 Jan
12 12 2012 Jan
13 13 2014 Mar
14 14 2012 Mar
15 15 2013 Feb
16 16 2014 Feb
17 17 2014 Mar
18 18 2012 Jan
19 19 2013 Mar
20 20 2012 Jan
베이스 Raggregate함수는 2014년 1월에 대한 관찰을 반환하지 않습니다.
aggregate(x ~ Year + Month, data = df1, FUN = length)
Year Month x
1 2012 Feb 1
2 2013 Feb 1
3 2014 Feb 5
4 2012 Jan 5
5 2013 Jan 2
6 2012 Mar 1
7 2013 Mar 3
8 2014 Mar 2
0을 카운트로 사용하여 이 달의 연도를 관찰하려면 위의 코드가 모든 월의 연도 조합에 대한 카운트를 포함하는 data.frame을 반환합니다.
data.frame(with(df1, table(Year, Month)))
Year Month Freq
1 2012 Feb 1
2 2013 Feb 1
3 2014 Feb 5
4 2012 Jan 5
5 2013 Jan 2
6 2014 Jan 0
7 2012 Mar 1
8 2013 Mar 3
9 2014 Mar 2
제 집계에 대해 저는 보통 평균과 "이 그룹이 얼마나 큰지"(예: 길이)를 보고 싶어합니다.그래서 이것은 그 상황들을 위한 저의 유용한 단편입니다.
agg.mean <- aggregate(columnToMean ~ columnToAggregateOn1*columnToAggregateOn2, yourDataFrame, FUN="mean")
agg.count <- aggregate(columnToMean ~ columnToAggregateOn1*columnToAggregateOn2, yourDataFrame, FUN="length")
aggcount <- agg.count$columnToMean
agg <- cbind(aggcount, agg.mean)
다음을 사용하는 SQL 솔루션sqldf패키지:
library(sqldf)
sqldf("SELECT Year, Month, COUNT(*) as Freq
FROM df1
GROUP BY Year, Month")
사용.collapse짐을 꾸리다R
library(collapse)
library(magrittr)
df %>%
fgroup_by(year, month) %>%
fsummarise(number = fNobs(x))
library(tidyverse)
df_1 %>%
group_by(Year, Month) %>%
summarise(count= n())
@Ben 답변을 고려할 때, R은 다음과 같은 경우 오류를 던질 것입니다.df1포함 안 함x기둥.하지만 그것은 우아하게 해결될 수 있습니다.paste:
aggregate(paste(Year, Month) ~ Year + Month, data = df1, FUN = NROW)
마찬가지로 그룹화에 세 개 이상의 변수가 사용되는 경우 일반화할 수 있습니다.
aggregate(paste(Year, Month, Day) ~ Year + Month + Day, data = df1, FUN = NROW)
사용할 수 있습니다.by을 합니다.by(df1$Year, df1$Month, count)필요한 집계 목록을 생성합니다.
출력은 다음과 같습니다.
df1$Month: Feb
x freq
1 2012 1
2 2013 1
3 2014 5
---------------------------------------------------------------
df1$Month: Jan
x freq
1 2012 5
2 2013 2
---------------------------------------------------------------
df1$Month: Mar
x freq
1 2012 1
2 2013 3
3 2014 2
>
여기에는 이미 많은 훌륭한 답변이 있지만, 원래 데이터 세트에 해당 행이 반복되는 횟수를 포함하는 새 열을 추가하려는 사용자를 위해 옵션을 하나 더 추가하고 싶었습니다.
df1$counts <- sapply(X = paste(df1$Year, df1$Month),
FUN = function(x) { sum(paste(df1$Year, df1$Month) == x) })
위의 답변 중 하나를 다음과 결합하여 동일하게 달성할 수 있습니다.merge()기능.
위의 집계 솔루션을 사용해 보면 다음과 같은 오류가 발생합니다.
변수의 유형(목록)이 잘못되었습니다.
날짜 또는 날짜 시간 스탬프를 사용하고 있으므로 변수에 as. 문자를 사용해 보십시오.
aggregate(x ~ as.character(Year) + Month, data = df, FUN = length)
변수 중 하나 또는 둘 다에 대해 입력합니다.
저는 주로 테이블 기능을 사용합니다.
df <- data.frame(a=rep(1:8,rep(c(1,2,3, 4),2)),year=2011:2021,month=c(1,3:10))
new_data <- as.data.frame(table(df[,c("year","month")]))
언급URL : https://stackoverflow.com/questions/9809166/count-number-of-rows-within-each-group
'source' 카테고리의 다른 글
| Firebase Analytics 디버그 보기에 아무것도 표시되지 않음 (0) | 2023.06.06 |
|---|---|
| Ruby 및/또는 Rails에서 사용자 정의 오류 유형을 정의하는 위치 (0) | 2023.06.06 |
| 이전에 배포한 Firebase 콘솔에서 코드 가져오기 (0) | 2023.06.06 |
| sys.stdout이 터미널에 연결되어 있는지 여부를 탐지하려면 어떻게 해야 합니까? (0) | 2023.06.06 |
| C에 대한 공통 배열 길이 매크로? (0) | 2023.06.06 |