我这里有一个非常简单的问题。我想计算数据帧中两列之间的比率。我想计算列“COLD”大于零时的比率。比率为“COLE / COLD / 3600”。我想要使用的另一个条件是找到“COLD”的最后一个非零值并将该比率指定为零。
玩具数据如下:
new <- structure(list(DIST = c(290.5, 291.5, 292.5, 293.5, 294.5, 295.5,
296.5, 297.5, 298.5, 299.5, 300.5, 301.5, 302.5, 303.5, 304.5,
305.5, 306.5, 307.5, 308.5, 309.5), COLE = c(8.99599581870558e-34,
4.7205846523432e-34, 2.46933986060826e-34, 1.28710593231168e-34,
6.68129579857346e-35, 3.4504303472814e-35, 1.77184019853307e-35,
9.05642991756649e-36, 4.6013156549926e-36, 2.31604511599026e-36,
1.14687288574039e-36, 5.5010466649376e-37, 2.45427157311345e-37,
8.97771568697138e-38, 2.3363639100918e-38, 0, 0, 0, 0, 0), COLD = c(6.1904901729067e-36,
3.2185001604668e-36, 1.65347497008439e-36, 8.31494814855863e-37,
4.01276411184216e-37, 1.77017459051552e-37, 5.41351248244182e-38,
1.12878823222726e-38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), .Names = c("DIST",
"COLE", "COLD"), class = "data.frame", row.names = 291:310)
我使用的公式如下:
new$COLF <- ifelse(test=(new$COLD>0),(new$COLE/new$COLD/3600),0)
有人可以建议我如何自动找到“COLD”列的最后一行非零,然后将“COLF”的值指定为零?
感谢。
答案 0 :(得分:3)
使用
which.max(cumsum(abs(new$COLD) > 1e-100))
查找最后一个非零COLD
的索引。请注意,我在这里使用了特定的精度 - 选择一个适合您的数据并在其他比较中使用它,例如, new$COLD > -1e-100
。比较双打应始终涉及某种精确度。