하나의 열의 순환 값을 기준으로 그룹화해야하는 일일 데이터 집합이 있습니다. 그룹화 식별자가 포함 된 다른 열을 추가하고 싶습니다. 예를 들어 내가 데이터열의 순환 값을 사용하여 R의 시계열 데이터 그룹화
나는이 같은 DAS의 값에 따라 그룹화 포함하는 다른 열을 추가 할YEAR = c(1900, 1900, 1900, 1901,1901, 1901, 1901, 1902, 1902, 1902, 1903)
CS = c("SUM", "SUM", "SUM", "SUM", "SPR", "SPR", "SPR", "SPR", "SPR", "SPR", "SPR")
DAS = c(1, 2, 3, 4, 1, 2, 3,1, 2, 3, 4)
mydt <- data.table (YEAR, CS, DAS)
YEAR CS DAS
1: 1900 SUM 1
2: 1900 SUM 2
3: 1900 SUM 3
4: 1901 SUM 4
5: 1901 SPR 1
6: 1901 SPR 2
7: 1901 SPR 3
8: 1902 SPR 1
9: 1902 SPR 2
10: 1902 SPR 3
11: 1903 SPR 4
의 설정 : 분명히
YEAR CS DAS GRP
1: 1900 SUM 1 1900SUM
2: 1900 SUM 2 1900SUM
3: 1900 SUM 3 1900SUM
4: 1901 SUM 4 1900SUM
5: 1901 SPR 1 1901SPR
6: 1901 SPR 2 1901SPR
7: 1901 SPR 3 1901SPR
8: 1902 SPR 1 1902SPR
9: 1902 SPR 2 1902SPR
10: 1902 SPR 3 1902SPR
11: 1903 SPR 4 1902SPR
를, GRP는 년의 단지 연결입니다 및 CS, 비록 어떤 식별자, 말하길 그룹 번호, 할 것입니다. 그룹화는 DAS의 값이 나는이 작업을 수행하기 위해 루프를 사용 1.을 반환 할 때를 기반으로하고 그것을 잘
group <- function(df) {
for (i in 1: nrow(df)) {
if (df$DAS[i]== 1) {
nval<- paste0(df$YEAR[i], df$CS[i])
}
df$GRP[i] <- nval
}
df
}
일 내 문제는 수백만 개의 행의 부부와 함께 사용하면 매우 느리다입니다. 훨씬 빠른 방법으로 그것을 성취 할 수있는 방법이 있습니까?
colemand77에 의해 지적, 그룹화가 완전히 년과 CS의 조합을 기반으로하지 않습니다 UPDATE, 오히려 년 CS의 값이 때 1. 경우가있다하는 DAS의 값이 반환 할 때를 기반으로 다르지만 그들은 여전히 DAS의 동일한주기에 속해 있으므로 한 그룹에 속합니다.
데이터 테이블이 자동으로 빨리 표시되지 않습니다. 소개 및 참조 의미 vignettes [여기] (https://github.com/Rdatatable/data.table/issues/944)를 검토하십시오. 당신이 찾고있는 것은'mydt [, GRP : = .GRP, by = c ("YEAR", "CS")]'-'.GRP'는 특별한 inbuilt 변수입니다. – Arun
업데이트 된 코멘트가 ... 그룹 변경시기를 결정하는 로직 (날짜 등)이 있습니까? 아니면 DAS가 1로 돌아가고 있습니까? DAS는 항상 동일한 순서입니까? 항상 1 : 4 또는 때때로 1 : 5 등? – colemand77
DAS는 항상 1에서 n까지의 양의 정수 시퀀스입니다. 따라서 n은 양의 정수가 될 수 있습니다. 내 데이터에서 한주기는 파종에서 수확까지 한 번의 수확에 해당합니다. DAS는 실제로 1 일 (파종)부터 시작하여 작물이 죽거나 수확 될 때 종료합니다. 불행히도 작물은 12 월에 시작하여 다음 해 5 월에 수확 할 수 있습니다. 몇 년 동안의 일일 데이터는 하나의 긴 시간대에 버려집니다. YEAR와 Cropping Season은 좋은 그룹화 변수가 아닙니다. 제 생각에는 데이터를 그룹화하는 유일한 방법은 DAS가 1로 돌아갈 때입니다. – User9999