智能方法在R中没有For循环创建汇总表

时间:2014-03-11 18:36:52

标签: r for-loop

下午好,

我有一个如下数据框,第一列中的时间戳为POSIXlt,第二列中的数据值为:

Date            Data
9/9/13 12:48    0.24
9/12/13 10:26   0.26
9/13/13 13:00   -0.14
9/17/13 11:31   -0.04
9/17/13 15:43   0.04
9/18/13 11:51   -0.04
9/18/13 14:35   -0.08
9/18/13 15:11   -0.08
9/19/13 10:12   -0.08
9/19/13 11:48   -0.16

我想按日总结数据列,如下所示:

Date    Total For Day
9/9/13      0.24
9/12/13     0.26
9/13/13     -0.14
9/17/13      0   
9/18/13     -0.20
9/19/13     -0.24

我最初的反应是创建一个for循环,如下所示:

  • 运行unique(as.Date(Date Column))以获取所有日期的列表。
  • 只要初始数据表中的当前日期与正在检查的唯一列表中的日期匹配,就可以通过创建总计来遍历此新列表。
  • 一旦日期不匹配,请记录总数并重复下一个日期,直到列表完成。

10次中有9次,当我在R中执行for循环时,总会有一个命令或方法更容易,更有效地执行它。

在这种情况下,是否有比for循环更好的方法?

3 个答案:

答案 0 :(得分:3)

如果您是dat数据:

aggregate(dat$Data, list(as.Date(dat$Date)), sum)

##      Group.1     x                                                                                                                                                                                                                         
## 1 2013-09-09  0.24                                                                                                                                                                                                                         
## 2 2013-09-12  0.26                                                                                                                                                                                                                         
## 3 2013-09-13 -0.14                                                                                                                                                                                                                         
## 4 2013-09-17  0.00                                                                                                                                                                                                                         
## 5 2013-09-18 -0.20                                                                                                                                                                                                                         
## 6 2013-09-19 -0.24  

其他人的数据:

structure(list(Date = structure(list(sec = c(0, 0, 0, 0, 0, 0,                                                                                                                                                                               
 0, 0, 0, 0), min = c(48L, 26L, 0L, 31L, 43L, 51L, 35L, 11L, 12L,                                                                                                                                                                             
 48L), hour = c(12L, 10L, 13L, 11L, 15L, 11L, 14L, 15L, 10L, 11L                                                                                                                                                                              
 ), mday = c(9L, 12L, 13L, 17L, 17L, 18L, 18L, 18L, 19L, 19L),                                                                                                                                                                                
     mon = c(8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L), year = c(113L,                                                                                                                                                                          
     113L, 113L, 113L, 113L, 113L, 113L, 113L, 113L, 113L), wday = c(1L,                                                                                                                                                                      
     4L, 5L, 2L, 2L, 3L, 3L, 3L, 4L, 4L), yday = c(251L, 254L,                                                                                                                                                                                
     255L, 259L, 259L, 260L, 260L, 260L, 261L, 261L), isdst = c(1L,                                                                                                                                                                           
     1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L)), .Names = c("sec", "min",                                                                                                                                                                           
 "hour", "mday", "mon", "year", "wday", "yday", "isdst"), class = c("POSIXlt",                                                                                                                                                                
 "POSIXt")), Data = c(0.24, 0.26, -0.14, -0.04, 0.04, -0.04, -0.08,                                                                                                                                                                           
 -0.08, -0.08, -0.16)), .Names = c("Date", "Data"), row.names = c(NA,                                                                                                                                                                         
 -10L), class = "data.frame")

答案 1 :(得分:1)

可替换地:

使用ddply

 require(plyr)
 ddply(yourData, "Date", summarize, Total_for_day = sum(Data))

使用dplyr

require(dplyr)
yourData %.% group_by(Date) %.% summarize(Total_for_day = sum(Data))

tapply

tapply(X = yourData$Data, INDEX = yourData$Date, FUN = sum)

答案 2 :(得分:0)

我使用dplyr进行此类操作。您的示例不可重现,我将使用内置mtcars数据集。以下计算每个独特气缸尺寸的每加仑平均英里数:

library(dplyr)
summarise(group_by(mtcars, cyl), mean_mpg = mean(mpg))
Source: local data frame [3 x 2]

  cyl mean_mpg
1   8 15.10000
2   4 26.66364
3   6 19.74286