выполнение операции столбца за столбцом в R

Близкие

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

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)

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

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


person ery    schedule 04.10.2011    source источник


Ответы (3)


Используйте функцию из семейства 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 
person Andrie    schedule 04.10.2011
comment
работает как шарм. Мне просто нужно выбрать столбцы температуры, например. Строки[,2:33] для столбцов со 2 по 33. - person ery; 04.10.2011
comment
@ery Вы можете сделать это или использовать Lines[, -1], как в моем ответе, - это означает удалить первый столбец. - person Andrie; 04.10.2011

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

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

Должен сделать трюк.

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

> apply(dat[, -1], 2, function(x) quantile(x, .99)) 
Zone01 Zone02 
 35.20  37.75
person Chase    schedule 04.10.2011

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

person joheid    schedule 04.10.2011