对于大于x大于3倍(按组)的值的连续行计算“平均值”

问题描述 投票:-2回答:1

这是我的df(data.frame):

group1  group2   value
chr1     a        1 
chr1     a        1
chr1     a        1
chr1     b        2.2
chr1     b        2.5 
chr1     b        2.5
chr1     b        2.8
chr2     c        3.1
chr2     c        -3.2
chr2     c        -3.7
chr2     c        -3.1
chr2     d        4

对于属于同一组2和组1的“值”列中的值,如果有3个以上的连续值大于2或小于-2,则将计算这些值的平均值,否则将保留原始值。] >

输出应为:

group1  group2   value      mean
chr1     a        1          1 # does not change because it's smaller than 2
chr1     a        1          1
chr1     a        1          1
chr1     b        2.2        2.5 # mean of 2.2, 2.5, 2.5, 2.8
chr1     b        2.5        2.5 # mean of 2.2, 2.5, 2.5, 2.8
chr1     b        2.5        2.5 # mean of 2.2, 2.5, 2.5, 2.8
chr1     b        2.8        2.5 # mean of 2.2, 2.5, 2.5, 2.8
chr2     c        3.1        3.1 # not used for mean calculation above (different group)
chr2     c        -3.2       -3.3 # mean of -3.2, -3.7, -3.1
chr2     c        -3.7       -3.3 # mean of -3.2, -3.7, -3.1
chr2     c        -3.1       -3.3 # mean of -3.2, -3.7, -3.1
chr2     d        4          4

R或Perl更好。任何帮助表示赞赏!

这是我的df(data.frame):group1 group2值chr1 a 1 chr1 a 1 chr1 a 1 chr1 b 2.2 chr1 b 2.5 chr1 b 2.5 chr1 b 2 ....

r linux bash perl
1个回答
0
投票

使用末尾注释中可重复显示的DF,使用data.table中的rleid创建一个分组变量。否则不使用data.table。然后创建一个使用问题规则的均值函数。最后,将平均数应用于每个成分valueg

© www.soinside.com 2019 - 2024. All rights reserved.