我正在尝试在R中构建一个非常复杂的循环。
我有一组数据集作为名为p_int
的对象(p_int
是峰值强度)。
对于此示例,p_int
即str(p_int)
的结构为:
num [1:1599]
p_int
的大小可能会有所不同,即[1:688],[1:1200]等。
我正在尝试用p_int
构建一个复杂的循环来提取单同位素峰,这些是具有某些特征的峰,它们将被提取到第二个对象中:mono_iso
:< / p>
p_int
中搜索前八组数据结果。在这8个中,找到得分最高的数据集(该分数也需要高于50)。mono_iso
。类似于此:
16 Results: 100 120 90 66 220 90 70 30 70 100 54 85 310 200 33 41
**因此,首先,循环将获得前8个结果:
100 120 90 66 220 90 70 30
**然后它决定哪个峰值最大:
220
**它将确定220是否大于50
IF YES: It would record 220 into "mono_iso"
IF NO: It would move on to the next set of 8 results
** 220大于50 ...所以记录到mono_iso
然后循环将其位置设置为220,然后跳过“90”并再次开始相同的事情,从下一个数据结果开始的下一组8个结果:在这种情况下,在70:< / p>
70 30 70 100 54 85 310 200
然后它将记录“310”值(最高值)并再次执行相同的操作等等,直到数据集结束。
希望这很有道理。如果有人能帮助我使用R-script制作这样的循环,我会非常感激。
答案 0 :(得分:3)
使用此:
mono_iso <- aggregate(p_int, by=list(group=((seq_along(p_int)-1)%/%8)+1), function(x)ifelse(max(x)>50,max(x),NA))$x
这会为NA
的群组设置max(...)<=50
。如果你想过滤掉那些,请使用:
mono_iso <- mono_iso[!is.na(mono_iso)]