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

mar*_*arw 1 string r subset conditional-statements dataframe

这是一个示例:

> 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
Run Code Online (Sandbox Code Playgroud)

如何计算所有重复标签的中位数(或更多,其他数据框列中的相应值),但仅考虑前两个字母(即"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
Run Code Online (Sandbox Code Playgroud)

非常感谢你.

小智 5

您是否尝试过做一个新的数据帧-我称之为tmp2--where 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))
Run Code Online (Sandbox Code Playgroud)

要么 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]
Run Code Online (Sandbox Code Playgroud)