以下是一个示例:
> 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
非常感谢。
答案 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]