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 回答