【发布时间】:2017-10-15 21:27:08
【问题描述】:
我在数据框rand_sample 中有一个列,它是数据框列表。我想只提取数据帧以在该数据帧中执行计算,然后将这些计算作为新列添加到rand_sample
str(rand_sample[1, ]$times)
List of 1
$ :'data.frame': 13 obs. of 2 variables:
..$ white: num [1:13] 1800 1834 1875 1897 1887 ...
..$ black: num [1:13] 1800 1860 1946 2031 2114 ...
第一个索引如下所示:
> rand_sample[1:10,]$times
[[1]]
white black
1 1800 1800
2 1834 1860
3 1875 1946
4 1897 2031
5 1887 2114
6 1839 2203
7 1835 2282
8 1880 2370
9 1875 2400
10 1892 2323
11 1612 2356
12 1622 2370
13 1619 2370
本质上,我想做的可以用这个for循环来表达:
for (i in 1:nrow(rand_sample)) {
current <- rand_sample[i, ]$times[[1]]
mW <- abs(diff(current$white))
mB <- abs(diff(current$black))
maxWhite <- max(mW)
minWhite <- min(mW)
maxBlack <- max(mB)
minBlack <- min(mB)
sdWhite <- sd(mW)
sdBlack <- sd(mB)
avgW <- mean(mW)
avgB <- mean(mB)
rand_sample[i, ]$maxWhite <- maxWhite
rand_sample[i, ]$minWhite <- minWhite
rand_sample[i, ]$maxBlack <- maxBlack
rand_sample[i, ]$minBlack <- minBlack
rand_sample[i, ]$sdWhite <- sdWhite
rand_sample[i, ]$sdBlack <- sdBlack
rand_sample[i, ]$avgTimeWhite <- avgW
rand_sample[i, ]$avgTimeBlack <- avgB
}
两个问题:
-
如何从
$timestamp中的每个列表中仅提取数据框?rand_sample$times[[1]]让我只是第一行。我希望能够做类似的事情
rand_samples$dataFrameTimes <- rand_sample$times[[1]]因此,新列只是一列数据框,而不是包含数据框的列表。
如何通过更快的机制模拟
for循环?运行for循环每行大约需要 1 秒。我有一个包含数千行的数据集,所以这是站不住脚的。
【问题讨论】:
-
请提供一个可重现的示例,例如使用
dput的rand_sample的子集 -
数据是专有的。还有其他方法吗?