年齢コホートの妊娠可能性を予測するモデルを開発しています。私は現在、このようなデータフレームを持っています。行は年齢、列は年です。各セルの値は、その年の年齢別出生されています。しかし、私が欲しいのは、コホートなるように各行で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)
EDIT:
ここで私が最終的に使用ソリューションです。これは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