0

これに似たデータフレームがあります

df <- data.frame (month = c("01", "02", "03", "04", "01", "03"),
                  Year= c("01", "01", "01", "01", "02", "02"),
                  value= c("12", "20", "34", "18", "22", "27")
                  )

ただし、列を一意の月 (01 ~ 12 の範囲) にし、行を年ごとの値にしたいと考えています。どうすればこれを行うことができますか?

4

1 に答える 1

0

これには 2 つの手順があります。テーブルを記述します。 ?xtabs関数で数式を使用して、データ フレームからテーブルを作成できます。残念ながら、value列を「応答」として使用することはできません。そのため、 で指定された回数だけ各行を単純に複製しましたvalue。検討:

(tab <- xtabs(~Year+month, df[rep(1:6, times=df$value),]))
#     month
# Year 01 02 03 04
#   01  1  3  6  2
#   02  4  0  5  0

あなたの質問では、月 1 ~ 12 を参照していますが、例には 4 つだけがリストされています。0 の余分な列も追加できるようにするかどうかは明確ではありません。?cbindを使用して 0 の行列を追加してから、?colnamesで名前を作成できます。検討:

(tab <- cbind(tab, matrix(0, nrow=2, ncol=8)))
#    01 02 03 04                
# 01  1  3  6  2 0 0 0 0 0 0 0 0
# 02  4  0  5  0 0 0 0 0 0 0 0 0
colnames(tab) <- c(paste0(0,1:9), "10","11","12")
tab
#    01 02 03 04 05 06 07 08 09 10 11 12
# 01  1  3  6  2  0  0  0  0  0  0  0  0
# 02  4  0  5  0  0  0  0  0  0  0  0  0
于 2020-06-13T12:27:14.173 に答える