首先,這裏是清單的一個小例子數據幀:
# create some sample data
whaledatas <- list(
data.frame(x=1:3, y=11:13),
data.frame(x=6:10, y=16:20)
)
我覺得這個和是一樣的在原來的問題10循環?
# combine into single data frame
whaledatas.all <- do.call("rbind", whaledatas)
# change this to 200! kept small here for illustration...
XMAX <- 10
# create output matrix
dat <- matrix(0.0, length(whaledatas), XMAX)
# create index vector for dat rows
i <- rep(1:length(whaledatas), sapply(whaledatas, nrow))
# populate dat
dat[cbind(i, whaledatas.all[["x"]])] <- whaledatas.all[["y"]]
編輯
的rbind
得到作爲輸入的數量增加窘況慢。這個版本(包裝在方便的功能)避免它,並且運行速度更快:
datify <- function(x, xmax=200) {
dat <- matrix(0.0, length(x), xmax)
for (i in seq_along(x)) {
this.df <- x[[i]]
coords <- cbind(rep(i, nrow(this.df)), this.df[["x"]])
dat[coords] <- this.df[["y"]]
}
dat
}
請注意,我們在dat
開始全部爲零,因此沒有必要修復後的事實...
> datify(whaledatas, xmax=10)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 11 12 13 0 0 0 0 0 0 0
[2,] 0 0 0 0 0 16 17 18 19 20
定時採樣數據幀30k的長度列表,生成使用Arun的my_sampler
功能:
set.seed(99)
in.d <- lapply(1:30000, function(x) my_sampler(x))
system.time(dat <- datify(in.d, xmax=200))
## user system elapsed
## 1.317 0.011 1.328
如果我正確地讀這篇文章,你可以用這個成語'做.call(rbind,whaledatas')將'data.frames'的'list'轉換爲一個'data.frame'。 – Justin 2013-03-11 20:45:31
當你說數值在1和200之間時,這些整數值是否只有? – mnel 2013-03-11 22:36:32