연령 집단에 대한 출산율을 예측하는 모델을 개발 중입니다. 나는 현재 열이 나이이고 열이 몇 년인이 같은 데이터 프레임을 가지고있다.R에서 데이터 프레임 대각선을 행으로 변환합니다.
> df1
iso3 sex age fert1953 fert1954 fert1955
14 AUS female 13 0.000 0.00000 0.00000
15 AUS female 14 0.000 0.00000 0.00000
16 AUS female 15 13.108 13.42733 13.74667
17 AUS female 16 26.216 26.85467 27.49333
18 AUS female 17 39.324 40.28200 41.24000
그러나, 내가 원하는 것은 집단 될 각 행은 다음과 같습니다 각 셀의 값은 그 해 연령별 출산율이다. 행과 열은 개별 연도를 나타내므로 코호트 데이터는 대각선을 가져 와서 얻을 수 있습니다. 이 같은 결과를 찾고 있어요 :
> df2
iso3 sex ageIn1953 fert1953 fert1954 fert1955
14 AUS female 13 0.000 0.00000 13.74667
15 AUS female 14 0.000 13.42733 27.49333
16 AUS female 15 13.108 26.85467 41.24000
17 AUS female 16 26.216 40.28200 [data..]
18 AUS female 17 39.324 [data..] [data..]
다음은 df1
데이터 프레임의 :
df1 <- structure(list(iso3 = c("AUS", "AUS", "AUS", "AUS", "AUS"), sex = c("female",
"female", "female", "female", "female"), age = c(13, 14, 15,
16, 17), fert1953 = c(0, 0, 13.108, 26.216, 39.324), fert1954 = c(0,
0, 13.4273333333333, 26.8546666666667, 40.282), fert1955 = c(0,
0, 13.7466666666667, 27.4933333333333, 41.24)), .Names = c("iso3",
"sex", "age", "fert1953", "fert1954", "fert1955"), class = "data.frame", row.names = 14:18)
편집 :
여기에 내가 궁극적으로 사용되는 솔루션입니다. 그것은 David의 답을 바탕으로했지만, 각 레벨의 iso3
에 대해이 작업을 수행해야했습니다.
df.ls <- lapply(split(f3, f = f3$iso3), FUN = function(df1) {
n <- ncol(df1) - 4
temp <- mapply(function(x, y) lead(x, n = y), df1[, -seq_len(4)], seq_len(n))
return(cbind(df1[seq_len(4)], temp))
})
f4 <- do.call("rbind", df.ls)
당신이 당신을 지연 하시겠습니까 데이터 세트? –
네,하지만 그건 매우 귀찮은 일이라고 생각합니다. 저는 50 년 동안 188 개국에서이 일을하고 있습니다. 그렇게 할 수있는 좋은 방법을 생각할 수 있다면 좋은 해결책이 될 수 있습니다. – rsoren