【发布时间】:2014-08-21 04:46:35
【问题描述】:
我的数据框有四个变量。
DF <- read.table(text=" v1 v2 v3 v4
175 14.842 3.06 3300.00
176 0.777 3.21 80
177 4.770 4.15 39.28
178 10.450 6.24 50.36
179 0.507 6.27 0.48
180 0.037 3.31 -47.21
181 15.627 6.28 89.73
182 57.856 16.90 169.11
183 26.457 20.10 70
184 1.482 20.29 0.95
185 0.842 20.45 0.79", header=TRUE)
在 3 的移动窗口中,即 (175,176,177)、(176,177,178)、(177,178,179)、(178,179,180) 等,在 v4 列中,如果所有三个 v4 都 > -30,我想打印中间行。例如,如果 175,176,177 中的 v4 均 > -30,则存储 176,如果 (176,177,178) 中的 v4 均大于 > -30,则存储 177,以此类推。
以下代码(由 Roland 提供)完成了这项工作。 https://stackoverflow.com/questions/24453810/test-criteria-for-a-moving-window-of-3-rows-in-a-data-frame/24454255#24454255.
ind <- DF$v4 > -30
ind <- filter(ind, rep(1, 3)) == 3L
ind[is.na(ind)] <- FALSE
DF[ind, ]
# v1 v2 v3 v4
#2 176 0.777 3.21 80.00
#3 177 4.770 4.15 39.28
#8 182 57.856 16.90 169.11
但是我需要对代码做些小改动。除了所有三个 v4 > -30,第一个(三个)的 v3 值应该大于 2.5。例如,在 (175,176,177) 中,如果所有的 v4 > -30 且 175 的 v3 > 2.5,则存储 176。对于 (176,177,178),如果所有三个的 v4 > -30 且 176 的 v3
再次感谢。
【问题讨论】:
-
那么你的代码在哪里?不正确也没关系,但您肯定自己已经尝试过吗?
标签: r loops dataframe conditional-statements