我有一些代谢组学数据要处理(验证实际存在的化合物)。
`'data.frame': 544 obs. of 48 variables:
$ X : int 1 2 3 4 5 6 7 8 9 10 ...
$ No. : int 2 32 34 95 114 141 169 234 236 278 ...
$ RT..min. : num 0.89 3.921 0.878 2.396 0.845 ...
$ Molecular.Weight : num 70 72 72 78 80 ...
$ m.z : num 103 145 114 120 113 ...
$ HMDB.ID : chr "HMDB0006804" "HMDB0031647" "HMDB0006112" "HMDB0001505" ...
$ Name : chr "Propiolic acid" "Acrylic acid" "Malondialdehyde" "Benzene" ...
$ Formula : chr "C3H2O2" "C3H4O2" "C3H4O2" "C6H6" ...
$ Monoisotopic_Mass: num 70 72 72 78 80 ...
$ Delta.ppm. : num 1.295 0.833 1.953 1.023 0.102 ...
$ X1 : num 288.3 16.7 1130.9 3791.5 33.5 ...
$ X2 : num 276.8 13.4 1069.1 3228.4 44.1 ...
$ X3 : num 398.6 19.3 794.8 2153.2 15.8 ...
$ X4 : num 247.6 100.5 1187.5 1791.4 33.4 ...
$ X5 : num 98.4 162.1 1546.4 1646.8 45.3 ...`
我尝试编写一个循环,以便如果Δ ppm值大于(m/z -分子量)/分子量,则在后续 Dataframe 中删除整行。
for (i in 1:nrow(rawdata)) {
ppm <- (rawdata$m.z[i] - rawdata$Molecular.Weight[i]) /
rawdata$Molecular.Weight[i]
if (ppm > rawdata$Delta.ppm[i]) {
filtered_data <- rbind(filtered_data, rawdata[i,])
}
}
在“Values”部分下,它没有给我一个包含已验证化合物的新df,而是为“ppm”生成了一个数字。
对R还是很陌生的,任何帮助都是超级感激的!
2条答案
按热度按时间rggaifut1#
1.不需要逐行执行此操作,我们可以在一个操作中删除所有不需要的行:
1.使用
rbind(old, newrow)
向帧中迭代添加行在实践中是可行的,但是扩展性 * 非常可怕 *,请参见The R Inferno中的“增长对象”。对于添加的每一行,它都会创建old
中所有行的完整副本,这一方法可以工作,但是开始会变慢很多。最好生成这些新行的列表,然后一次对它们进行rbind
;例如,q8l4jmvw2#