1

我这里有一个非常简单的问题。我想计算数据框中两列之间的比率。我想计算“冷”列大于零时的比率。该比率将为“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”的值分配为零?

谢谢。

4

1 回答 1

3

利用

which.max(cumsum(abs(new$COLD) > 1e-100))

找到最后一个非零的索引COLD。请注意,我在这里使用了特定的精度 - 选择一个适合您的数据的精度,并在您的其他比较中使用它,例如new$COLD > -1e-100. 比较双打应该总是涉及某种精度。

于 2013-05-23T22:23:53.937 回答