我想要创建一个data.frame (我知道矩阵会更快,但我需要一个data.frame),但是它花费的时间太长(超过30分钟)。我相信有一个比我已经尝试过的更好的方法。
我有一个大对象(好的,在~=100MB ()之前磁盘上没有那么大的read.csv大小),类似于:
Date City V3 V4
1 2008-12-30 NewYork 15 54
2 2008-12-31 NewYork 16 34
[...]
4001 2008-12-30 London 12 12
4002 2008-12-31 London 16 44
[...]
9001 2008-12-30 Madrid 26 54
9002 2008-12-31 Madrid 64 23...imagine许多城市(超过500个)和许多日期(20年的每日数据,但有时是一个不规则的时间序列(即,马德里可能是唯一有观测2001-01-01)的城市)。
我想要的是将它们排列在一个data.frame中,这样行名将是日期,列名和城市名类似:
NewYorkV3 LondonV3 MadridV3
2008-12-30 15 12 26
2008-12-31 16 16 64我尝试过的(试图隐藏最终对象的增长)是:
uniqs <- unique(city.data[ ,2])
city.list <- vector('list', length(uniqs))
for (i in 1:length(uniqs)) {
city.list[[i]] <- subset(city.data, City==as.character(uniqs[i]))[ ,3]
}
city.df <- do.call('cbind', city.list)我相信有更有效的方法,但这是哪一种?
我可以以xts的形式加载对象吗?多么?我犯了我无法理解的错误..。那么日期列会有相同的值吗?
我能融化和重塑物体吗?多么?(再次出错)
谢谢!
发布于 2014-02-12 23:59:01
您也可能对使用data.table和扩展reshape2的dcast.data.table感兴趣。
这需要data.table版本1.8.11 (来自R-from)
library(reshape2)
library(data.table)
dcast(x, Date ~ City, value.var = 'V3')发布于 2014-02-12 23:47:07
reshape对此很有帮助:
reshape(x, direction="wide", timevar="City", idvar="Date")
Date V3.NewYork V4.NewYork V3.London V4.London V3.Madrid V4.Madrid
1 2008-12-30 15 54 12 12 26 54
2 2008-12-31 16 34 16 44 64 23发布于 2014-02-13 00:02:59
你们跑得很快。
我在日期栏上遇到了一些问题,但我做到了。
current.city.data$V1 <- as.character(current.city.data$V1)那时一切都解决了(反正也可以边读边读)
谢谢。
https://stackoverflow.com/questions/21742021
复制相似问题