我有一个如下数据框,它是分类器的输出。
col1, class
123, 2
122, 5
124, 7
125, 9
126, 15
127, 2
128, 19
129, 5
130, 7
179, 9
180, 3
我想查找具有特定类模式的行,例如类位于 seq 5,7,9
中的所有行。
我想出的解决方案是通过移动一行并比较列来粘贴类列,如下所示
col1, class, class1, class2
123, 2,5,7
122, 5,7,9
124, 7,9,15
125, 9,15,2
126, 15,2,19
127, 2,19,5
128, 19,5,7
129, 5,7,9
130, 7,9,3
179, 9,3,NA,
180, 3,NA,NA
仅当我的模式中的字段数相同时,此问题才能解决,但我的字段数会发生变化。有些模式甚至可以有 5 到 7 个字段。
最佳答案
我们可以使用 data.table
中的 shift
,然后将元素粘贴
在一起并检查 579
的位置>
n <- 3
library(data.table)
setDT(df1)[, which(do.call(paste0, shift(class, seq(n)-1, type = "lead"))=="579")]
#[1] 2 8
或者我们可以使用 Map
和 Reduce
来代替 paste
setDT(df1)[, which(Reduce(`&`, Map(`==`, shift(class, seq(n)-1,
type = "lead"), c(5, 7, 9))))]
#[1] 2 8
关于r - 在 R 数据框中查找列值遵循序列的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37770801/