我有一个data.table,我想将一个模式列的向量部分放入其他列中。例如,我有以下data.table:
library(data.table)
df <- fread('./file')
df
V1 V2 V3 V4 V5 V6 V7 V8 V9
1: 0 -148 -49 -1 X CAT 5 0 NA
2: 1 -147 -49 5 X FOT 12 0 NA
3: 2 -146 -49 3 X FAT 53 0 NA
4: 3 -145 -48 -2 X BYE 10 0 NA
5: 4 -144 -48 0 X GOO 2 0 NA
我想从V7中提取存在于一组模式之间的值,并将V7中的值放入向量中。
起始模式如下:
V2 == -147 & V4 == 5 & V6 == 'FOT'
结束模式是:
V4 == -2 & V6 == 'BYE'
如果找到这些模式,则从它们之间的V7中提取值。因此应将12,53,10放入向量(x)中。
答案 0 :(得分:2)
我能想到的一种方法是使用which=TRUE
:
start = DT[V2 == -147 & V4 == 5 & V6=='FOT', which=TRUE] ## [1] 2L
end = DT[V4 == -2 & V6=='BYE', which=TRUE] ## [2] 4L
DT[start:end, V7]
# [1] 12 53 10
请注意,如果有多个匹配项,则会返回所有索引。您可能需要选择相应的start
和end
值。也是模式不返回任何匹配的情况。我会留给你解决这些边缘案件。
答案 1 :(得分:1)
这应该这样做:
n <- min(which((df$V2 == -147 & df$V4 == 5 & df$V6 =='FOT') == TRUE)) #determine the start
m <- max(which(df$V4 == -2 & df$V6 == 'BYE')) #determine the end
x <- df$V7[n:m]
>x
#[1] 12 53 10