Интеллектуальный способ создать сводную таблицу без цикла в R -- r поле с участием for-loop пол Связанный проблема

Intelligent Way To Create Summary Table Without For Loop In R


0
vote

проблема

русский

Добрый день,

У меня есть кадр данных следующим образом, с временным меттом в первом столбце, как POSIXLT, а значение данных во втором:

 <код> properties2  

Я хотел бы обобщить столбец данных по дням, который выглядит так:

 <код> properties3  

Моя начальная реакция состоит в том, чтобы создать контуру для цикла следующим образом:

    .
  • запустить уникальный (as.date (столбец даты)), чтобы получить список всех дат.
  • цикла через этот новый список, создавая сумму до тех пор, пока текущая дата в начальной таблице данных совпадает с датой из уникального списка.
  • После того, как даты не совпадают, запишите общий объем и повторите на следующую дату, пока список не будет завершен.

9 раз из 10, когда я делаю для цикла в R, всегда есть команда или метод, который делает это легче и более эффективно.

Есть ли лучший способ, чем для цикла в этом случае?

Английский оригинал

Good afternoon,

I have a data frame as follows, with a timestamp in the first column, as POSIXlt, and a data value in the second:

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 

I would like to summarize the data column by day that looks like this:

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 

My initial reaction is to create a for loop as follows:

  • Run unique(as.Date(Date Column)) to get a list of all of the dates.
  • Loop through this new list by creating a total so long as the current date in the initial data table matches the date from the unique list being checked.
  • Once the dates don't match, record the total and repeat for the next date until the list is complete.

9 times out of 10, when I do a for loop in R, there is always a command or method that does it more easily and more efficiently.

Is there a better way than a for loop in this case?

</div
     
   
   

Список ответов

1
 
vote
vote
Лучший ответ
 

В качестве альтернативы:

Использование <код> 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 :

 <код> crosstab()0  
 

Alternatively:

Using ddply:

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

Using dplyr:

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

Or tapply:

tapply(X = yourData$Data, INDEX = yourData$Date, FUN = sum) 
</div
 
 
3
 
vote

Если <код> crosstab()1 вы данные:

 <код> crosstab()2  

Данные для всех остальных:

 <код> crosstab()3  
 

If dat is you data:

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   

data for anyone else:

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") 
</div
 
 
   
   
0
 
vote

Я бы использовал <код> crosstab()4 для такого рода операций. Ваш пример не воспроизводится, я буду использовать встроенный <код> crosstab()5 DataSet. Следующее рассчитывает среднюю милю на галлон для каждого уникального размера цилиндра:

 <код> crosstab()6  
 

I'd use dplyr for this kind of operations. Your example is not reproducible, I'll use the builtin mtcars dataset. The following calculates the mean mile per gallon for each unique cylinder size:

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 
</div
 
 
 
 

Связанный проблема

0  Скрепление финансовых таблиц с веб-страницы с R, Rvest, RCURL  ( Scraping financial tables from web page with r rvest rcurl ) 
Я пробую разбор финансовых таблиц с веб-страницы. Я продолжал. Но я не могу устраивать список, или данные. Карамент <код> library(rvest) link <- "http://www...

0  Извлечение данных из нижних слоев в растробрике  ( Extracting data from lower layers in a rasterbrick ) 
Итак, я извлекаю данные из растробрика, который я сделал, используя метод из этого вопроса: Как извлечь данные из растробрика? В дополнение к получению да...

6  403 Ошибка при использовании Rvest для входа в веб-сайт для соскабливания  ( 403 error when using rvest to log into website for scraping ) 
Я пытаюсь высказать страницу на веб-сайте, который требует входа в систему и в целом получение ошибки 403. Я изменил код из этих 2 сообщений для моего сайта...

0  Ошибка при использовании списков  ( Error when using lists ) 
У меня есть файл .rdata со списком внутри. Однако я получаю сообщение об ошибке при попытке отобразить список. <код> ls(data$Test$t0) Error in list2env(lis...

1  Как избежать проблемы Log-Quartelive Log-Inf в MLE Function из пакета Stat4?  ( How to avoid the inf log likelihood problem in mle function from stat4 package ) 
Я хочу максимизировать функцию вероятности логики, чтобы соответствовать некоторым данным, но функция MLE останавливается с этой ошибкой, когда логическая вер...

0  Hexfile Package R  ( Hexfile package r ) 
Я пытаюсь импортировать файл eviews (.wf1) в <код> R с hexView пакет. код: <код> file = readEViews(hexViewFile("eviewsr.wf1"),as.data.frame = TRUE) ...

2  dlyryr "не обещание" ошибка  ( Dplyr not a promise error ) 
У меня есть набор набора панели, для которого я создал отсталые переменные с помощью функции LAG (). Когда я пытаюсь рассчитать дельта для каждого TimePoint, ...

2  Вопросы с установкой пакета Caret of R в Archlinux  ( Issues with installing caret package of r in archlinux ) 
Я пытаюсь установить пакет <код> SCRIPT="""UPDATE IND_AFRO.DRIVER SET Emp_Id = 1000, update_user_id = 'RIBST-4059' WHERE Emp_Id IN (SELECT Emp_Id ...

0  Как сделать бесконечно рекурсивный список в R: путать [и [[  ( How to make an infinitely recursive list in r confuse and ) 
Редактировать: Этот вопрос глупо, я путающую [и [((спасибо @josilber), но я не могу удалить его. Как можно сделать бесконечно рекурсивный список, l == l [1]...

99  Как выбрать строку с максимальным значением в каждой группе  ( How to select the row with the maximum value in each group ) 
В наборе данных с несколькими наблюдениями для каждого предмета я хочу взять подмножество только с максимальным значением данных для каждой записи. Например, ...

2  Package Desolve Package Can Parames включают в себя матрицу?  ( Desolve package can parameters include a matrix ) 
Я пытаюсь кодировать модель Seir, которая является возрастной, стратифицированной; То есть в моих дифференциальных уравнениях у меня есть параметр для массово...

5  Расчет дней в месяц между интервалом двух дат  ( Calculating days per month between interval of two dates ) 
У меня есть набор событий, которые каждый из которых имеет начало и окончание, но они проходят по объему ряда месяцев. Я хотел бы создать таблицу, которая пок...

1  Есть ли не-Java внедрение регрессионной модели M5P библиотеки RWEKA?  ( Is there a non java implementation of the m5p regression model of the rweka libr ) 
Я ищу функцию, которая создает модель регрессии M5P, как <код> M5P функция <код> RWeka библиотеки (как <код> M5P функция на основе кода Java, который имеет...

2  Как изменить график разброса GGPlot2  ( How to modify ggplot2 scatter plot ) 
Вот мой набор данных: <код> df1 = data.frame(Count.amp = c(8,8,1,2,2,5,8), Count.amp.1 = c(4,4,2,3,2,5,4)) Я попробовал <код> library(ggplot2) qplot(C...

1  Замените отсутствующие значения в ячейке со значением из ячейки выше (N-1) с помощью петли  ( Replace missing values in a cell with a value from the cell above n 1 using a ) 
У меня есть файл данных с тысячами строк, у которых есть пробелы, которые я хочу заполнить значением. Мне нужно заменить пустые ячейки со значениями из них вы...

Связанный проблема

0  Скрепление финансовых таблиц с веб-страницы с R, Rvest, RCURL 
0  Извлечение данных из нижних слоев в растробрике 
6  403 Ошибка при использовании Rvest для входа в веб-сайт для соскабливания 
0  Ошибка при использовании списков 
1  Как избежать проблемы Log-Quartelive Log-Inf в MLE Function из пакета Stat4? 
0  Hexfile Package R 
2  dlyryr "не обещание" ошибка 
2  Вопросы с установкой пакета Caret of R в Archlinux 
0  Как сделать бесконечно рекурсивный список в R: путать [и [[ 
99  Как выбрать строку с максимальным значением в каждой группе 
2  Package Desolve Package Can Parames включают в себя матрицу? 
5  Расчет дней в месяц между интервалом двух дат 
1  Есть ли не-Java внедрение регрессионной модели M5P библиотеки RWEKA? 
2  Как изменить график разброса GGPlot2 
1  Замените отсутствующие значения в ячейке со значением из ячейки выше (N-1) с помощью петли