簡體   English   中英

在R中無需for循環的情況下創建匯總表的智能方法

[英]Intelligent Way To Create Summary Table Without For Loop In R

下午好,

我有一個數據幀,如下所示,第一列中的時間戳記為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循環更好的方法?

如果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")

或者:

使用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)

我將使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM