1
R 데이터 프레임의 샘플 데이터는 다음과 같습니다.R : 데이터 프레임 수정, 코드 성능 향상
NAME ID SURVEY_YEAR REFERENCE_YEAR SUM SUM_REFYEAR
1 NAME1 47 1960 1959 -6 0
2 NAME1 47 1961 1960 -10 -6
3 NAME1 47 1965 1963 -23 -10
4 NAME2 259 2007 2004 -9 0
5 NAME2 259 2010 2009 NA 0
6 NAME2 259 2014 2011 -40 -9
7 NAME3 765 1888 1885 5 0
8 NAME3 765 1889 1888 12 5
9 NAME3 765 1890 1889 22 12
이 데이터 프레임을 생성하는 아래 코드를 사용하여 데이터를 수정합니다.
NAME ID SURVEY_YEAR REFERENCE_YEAR SUM SUM_REFYEAR
1 NAME1 47 1960 1959 -6 0
2 NAME1 47 1961 1960 -10 -6
3 NAME1 47 1963 1961 NA NA
4 NAME1 47 1965 1963 -23 -10
5 NAME2 259 2007 2004 -9 0
6 NAME2 259 2009 2007 NA NA
7 NAME2 259 2010 2009 NA 0
8 NAME2 259 2011 2010 NA NA
9 NAME2 259 2014 2011 -40 -9
10 NAME3 765 1888 1885 5 0
11 NAME3 765 1889 1888 12 5
12 NAME3 765 1890 1889 22 12
코드 자체는 나는 그것이 (REFERENCE_YEAR와 SURVEY_YEAR 사이의 NA 값을 작성) 수행 할 작업을하고있다. 그러나 더 큰 데이터 세트를 처리하는 데 오랜 시간이 걸립니다. 누군가가 어떻게이 단계를 최적화하여 더 빠른 성능을 낼 수 있을지 궁금합니다.
# read in data
data <- data.frame(NAME=c("NAME1", "NAME1", "NAME1","NAME2","NAME2","NAME2","NAME3","NAME3","NAME3"),
ID=c(47,47,47,259,259,259,765,765,765),
SURVEY_YEAR=c(1960,1961,1965,2007,2010,2014,1888,1889,1890),
REFERENCE_YEAR=c(1959,1960,1963,2004,2009,2011,1885,1888,1889),
SUM=c(-6,-10,-23,-9,NA,-40,5,12,22),
SUM_REFYEAR=c(0,-6,-10,0,0,-9,0,5,12))
# NA Fill between REFERENCE_YEAR and SURVEY_YEAR
i <- 1
while (i<=length(data$SUM)-1) {
if (data$ID[i+1]==data$ID[i]) {
# Check if row needs to be added
ref <- data$REFERENCE_YEAR[i+1]
surv <- data$SURVEY_YEAR[i]
if (ref-surv >= 1) {
# Add row
data[seq(i+2,nrow(data)+1),] <- data[seq(i+1,nrow(data)),]
data[i+1,1:2] <- data[i,1:2]
data[i+1,3:6] <- c(ref ,surv , NA, NA)
}
}
i <- i+1
}
여러분의 도움에 감사드립니다 :
여기 내 코드입니다!
완벽합니다. 이것은 매력처럼 작동하며 빠릅니다. 고맙습니다! – kurdtc