1

次のように、データフレーム df1 を df2 に変換したい:

df1 <- read.table(textConnection("
id     date    ret
1101 19900104 6.5867
1102 19900105 6.5383
1103 19900106 6.6043
1101 19900105 3.6943
1102 19900106 3.6368
1103 19900107 1.2740
1104 19900107 3.8572
1101 19900106 2.2525
1102 19900107 1.1253
1101 19900107 2.2331
"),header=T)

df2 <- read.table(textConnection("
date      1101    1102    1103     1104
19900104  6.5867  NA      NA       NA
19900105  3.6943  6.5383  NA       NA
19900106  2.2525  3.6368  6.6043   NA
19900107  2.2331  1.1253  1.2740   3.8572
"),header=T)

ループを使用しようとしましたが、1990 年から 2012 年までの毎日の期間をカバーする非常に大きなデータがある場合、それは良い解決策ではないと思います。

4

1 に答える 1

1

これは、ロングフォーマットからワイドフォーマットに移行しています。reshape2このような問題に対処するための優れたパッケージです。ロングからワイドにするには、 を使用しますdcast()。操作するオブジェクト ( df1)、次に式を指定します。これは基本的に、行のインデックスが の左側に~、列のインデックスが右側にあることを示します。

library(reshape2)
df2 <- dcast(df1, date ~ id)
df2
#       date   1101   1102   1103   1104
# 1 19900104 6.5867     NA     NA     NA
# 2 19900105 3.6943 6.5383     NA     NA
# 3 19900106 2.2525 3.6368 6.6043     NA
# 4 19900107 2.2331 1.1253 1.2740 3.8572
于 2013-06-21T03:26:13.373 に答える