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%,subset和substr,但我无法编译任何有用而简单.
这是我希望得到的:
> 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)