выполнение операции «столбец за столбцом» в R - PullRequest
2 голосов
/ 04 октября 2011

Народ

У меня есть данные о температуре для каждой зоны в здании, что-то вроде этого:

Lines <- "Date,Zone01,Zone02
 01/01  01:00:00,24.5,21.3
 01/01  02:00:00,24.3,21.1
 01/01  03:00:00,24.1,21.1
 01/01  04:00:00,24.1,20.9
 01/01  05:00:00,25.,21.
 01/01  06:00:00,26.,21.
 01/01  07:00:00,26.6,22.3
 01/01  08:00:00,28.,24.
 01/01  09:00:00,28.9,26.5
 01/01  10:00:00,29.4,29
 01/01  11:00:00,30.,32.
 01/01  12:00:00,33.,35.
 01/01  13:00:00,33.4,36
 01/01  14:00:00,35.8,38
 01/01  15:00:00,32.3,37
 01/01  16:00:00,30.,34.
 01/01  17:00:00,29.,33.
 01/01  18:00:00,28.,32.
 01/01  19:00:00,26.3,30
 01/01  20:00:00,26.,28.
 01/01  21:00:00,25.9,25
 01/01  22:00:00,25.8,21.3
 01/01  23:00:00,25.6,21.4
 01/01  24:00:00,25.5,21.5
 01/02  01:00:00,25.4,21.6
 01/02  02:00:00,25.3,21.8"

Что я хочу сделать, это рассчитать 99-й процентиль температуры вкаждая зона.Я сделаю эту команду:

Q=quantile(Lines$Zone01,0.99)

Но тогда мне придется делать это вручную для каждого столбца в наборе данных.Есть ли способ заставить эту команду пройти через все столбцы (начиная со второго столбца)?

Большое спасибо.

Ответы [ 3 ]

7 голосов
/ 04 октября 2011

Используйте функцию из семейства apply, в данном случае sapply:

> sapply(Lines[, -1], quantile, 0.99)
Zone01.99% Zone02.99% 
     35.20      37.75 

Вы заметите, что результатом этого является то, что quantile добавляется к имени столбца. Чтобы удалить это, передайте names=FALSE в качестве аргумента quantile:

> sapply(Lines[, -1], quantile, 0.99, names=FALSE)
Zone01 Zone02 
 35.20  37.75 
5 голосов
/ 04 октября 2011

Пакет plyr имеет изящную функцию с именем numcolwise, которая будет работать с каждым столбцом вашего фрейма данных , если он числовой .Что-то вроде:

library(plyr)
> numcolwise(function(x) quantile(x, .99))(dat)
    Zone01 Zone02
99%   35.2  37.75

Нужно сделать свое дело.

Конечно, вы всегда можете использовать базовое семейство применений:

> apply(dat[, -1], 2, function(x) quantile(x, .99)) 
Zone01 Zone02 
 35.20  37.75
3 голосов
/ 04 октября 2011

Предполагая, что ваши данные находятся в data.frame, вы можете преобразовать столбцы с данными о температуре в матрицу и использовать apply(matrix,2,quantile,0.99)

...