2013-06-21 27 views
1

我想转换数据帧DF1到DF2类似如下:如何按日期重新排列我的R数据框并填入NAs?

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年到日常期非常感谢任何人都可以帮助我......

+0

应该可以用'plyr'和/或'reshape'包(我没有用他们自己,但看到了类似的问题,频繁弹出,所以我不能帮你)来做到这一点。 –

回答

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 
+0

它的工作原理和感谢您的帮助...... @ alexwhan – toddleR