我有一个 Dataframe dt
V1 V2 V3 V4 V5 V6
52 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
53 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
54 23.41610 27.74736 0.00000 0.00000 0.00000 0.00000
55 46.25229 26.80305 12.08680 0.00000 0.00000 0.00000
56 16.93179 0.00000 12.76963 12.21179 0.00000 0.00000
57 0.00000 24.35663 0.00000 15.47197 11.55125 0.00000
58 46.11487 14.91367 0.00000 0.00000 16.51914 12.40029
59 35.93963 0.00000 0.00000 0.00000 15.10201 13.44208
60 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
对于每一列,我想找到第一个大于1的值,并选择它周围的(n-1:n+25)
行,然后将它们放入一个新的数据表中。
我试过使用data.table
for (i in 1:ncol(df)) {df[i >1 | shift(i>1, n=1L, type = "lead") | shift(i>1, n=25L, type = "lag")]}
但显然我的专栏是错的
我尝试在相同的for循环结构中使用seq_along
,只是为了获得25个“after”行:
output <- seq(min(which(df[i] > 1)), length.out = 25)
它只在满足阈值的情况下为第一列提供了一系列行号。
提前感谢您的帮助!
3条答案
按热度按时间3zwjbxry1#
根据您的示例表,您是否需要这样的内容?出于演示目的,我只使用了
target_row + 2
而不是+ 25
。输入
o2rvlv0m2#
使用 * data.table *(本质上与benson的相同):
2g32fytz3#
数据: