【问题标题】:Subsetting in R, joining and calculating multiple repetitionsR中的子集,加入和计算多次重复
【发布时间】:2011-09-30 15:01:25
【问题描述】:

这是一个示例:

> 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

非常感谢。

【问题讨论】:

    标签: string r conditional-statements dataframe subset


    【解决方案1】:

    您是否尝试过制作新的数据框--我将其命名为tmp2--在哪里tmp2$label==substr(tmp$label,0,2)?例如,您可以从那里使用tapply(tmp2$value1,tmp2$label,mean) 来获取value1tmp2$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]
    

    【讨论】:

    • 谢谢,杰克。不幸的是,我不明白解决方案。顺便说一句,我在您回复后更新了问题...
    • tmp2<-temp; tmp2$label<-substr(tmp2$label,0,2); median_value_1<-tapply(tmp2$value1,tmp2$label,median);
    猜你喜欢
    • 2017-07-14
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多