繁体   English   中英

在R中优化预处理数据帧

[英]Optimizing preprocessing data frame in R

我有以下名为dataValues数据框:

   dates         hours
1  2015-10-12    1
5  2015-10-12    5
9  2015-10-12    9
11 2015-10-12    11
14 2015-10-12    14
15 2015-10-12    15
17 2015-10-12    17
19 2015-10-12    19
22 2015-10-12    22
23 2015-10-12    23
24 2015-10-12    24
27 2015-10-13    3
29 2015-10-13    5
33 2015-10-13    9
36 2015-10-13    12
37 2015-10-13    13
38 2015-10-13    14
40 2015-10-13    16
42 2015-10-13    18
44 2015-10-13    20
45 2015-10-13    21
46 2015-10-13    22
47 2015-10-13    23
49 2015-10-14    1
54 2015-10-14    6
56 2015-10-14    8
59 2015-10-14    11
60 2015-10-14    12
61 2015-10-14    13
63 2015-10-14    15
64 2015-10-14    16
66 2015-10-14    18
69 2015-10-14    21
71 2015-10-14    23
72 2015-10-14    24

我已经对该数据框进行了预处理,以获取某天的所有时间,这是变量totallist并具有输出:

[[1]

[1] 1 5 9 11 14 15 17 19 22 23 24

[[2]

[1] 3 5 9 12 13 14 16 18 20 21 22 23

[[3]

[1] 1 6 8 11 12 13 15 16 18 21 23 24

我用于此的代码如下:

uniqueDates <- unique(dataValues$dates)
totallist <- {}
for(date in uniqueDates){
  templist <- {}
  for(i in 1:length(dataValues$dates)){
    if(dataValues$dates[i]==date){
      newlist <- append(templist,dataValues$hours[i])
    }
  }
  totallist <- append(totallist,list(templist))
}

对于此问题中的示例(3天),它可以正常工作,结果是我想要的,但是如果我在大型数据集(大约260天)中使用它,则大约需要6到7分钟才能完成。

我的问题是,是否有一种优化的方法来做我想做的事?

尝试以下任何一种方法:

# 1
with(unique(dataValues), split(hours, dates))

# 1a - variation of last solution
with(dataValues, lapply(split(hours, dates), unique))

# 2
unstack(unique(dataValues), hours ~ dates)

# 2a - variation of last solution
lapply(unstack(dataValues, hours ~ dates), unique)

请注意,如果已知数据值已经是unique(dataValues)问题中所示的示例数据中的情况unique(dataValues) ,则#1和#2中的unique(dataValues)可以仅替换为dataValues

我相信使用tapply函数会更好。 我创建了一个更简单的数据框,以显示其作用:

df <- data.frame(dates=rep(c("2015-01-02","2015-01-03","2015-01-04"),10),hours=trunc(runif(30,1,10)))

tapply(df$hours,df$dates,unique)

输出:

$`2015-01-02`
[1] 2 8 6 1 5

$`2015-01-03`
[1] 7 5 2 3

$`2015-01-04`
[1] 1 2 6 5 8 4 9

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM