在R中进行子集,连接并计算多次重复

时间:2011-07-07 16:21:26

标签: string r conditional-statements dataframe subset

以下是一个示例:

> 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%subsetsubstr的内容,但我无法编译任何有用且简单的内容。

这是我希望得到的:

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

非常感谢。

1 个答案:

答案 0 :(得分:5)

您是否尝试制作新的数据框 - 我称之为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]