这是我的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 ....
使用末尾注释中可重复显示的DF
,使用data.table中的rleid
创建一个分组变量。否则不使用data.table。然后创建一个使用问题规则的均值函数。最后,将平均数应用于每个成分value
的g
。