Подмножество в R, объединение и вычисление нескольких повторений - PullRequest
1 голос
/ 07 июля 2011

Вот пример:

> tmp
    label   value1  value2
1   aa_x_x  xx      xx
2   bc_x_x  xx      xx
3   aa_x_x  xx      xx
4   bc_x_x  xx      xx

Как рассчитать медиану всех повторных меток (или более, соответствующих значений в других столбцах фрейма данных), но с учетом только первых двух букв (т.е. "aa_1_1" и "aa_s_3" являются одинаковыми значениями)?Список меток конечен и пригоден для использования.

Я прочитал о aggregate, %in%, subset и substr, но я не могу собрать что-нибудь полезное и простое.

Вот что я надеюсь получить:

> tmp.result
    label   median1 some.calculation2
1   aa      xx      xx
2   bc      xx      xx
3   aa      xx      xx
4   bc      xx      xx

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

1 Ответ

5 голосов
/ 07 июля 2011

Вы пытались создать новый фрейм данных - я назову его tmp2 - где tmp2$label==substr(tmp$label,0,2)? Оттуда вы можете, например, использовать tapply(tmp2$value1,tmp2$label,mean), чтобы получить средние значения value1, агрегированные по tmp2$label.

Опция, использующая dplyr

library(dplyr)
tmp %>%
   group_by(label=sub('_.*$', '', label)) %>% 
   transmute(median1=median(value1), mean1=mean(value2))

Или data.table

 library(data.table)
 setDT(tmp)[,  c('median1', 'mean1') := list(median(value1), 
    mean1= mean(value2)) , .(label=sub('_.*$', '', label))][, c(1,4:5), 
       with=FALSE]
...