【发布时间】:2019-05-13 10:02:12
【问题描述】:
我需要编写一个搜索函数来使用 R 在大型数据集中查找某些元素的开始和结束位置。
我的示例数据集如下:
C1 C2 Index
aa J 1
aa J 2
aa J 3
ab O 4
aa O 5
aa J 6
aa J 7
aa J 8
aa J 9
aa K 10
ac K 11
aa J 12
aa J 13
我想编写一个像search("aa","J") 这样的搜索函数(其中“aa”是来自 C1 列的值,“J”是来自 C2 列的值)。该函数将首先根据“aa”对数据集进行子集化;然后根据这个子集提供索引。
结果将返回矩阵中所有位置的索引,如下所示:
[,1] [,2]
[1,] 1 3
[2,] 5 8
[3,] 10 11
非常感谢。
我尝试修改提供的代码;但有错误。可以帮忙看看吗?
get_inds <- function(test, C1, C2) {
test <- subset(test, test$C1 == C1)
inds <- rle(test$C1 == C1 & test$C2 == C2)
end = cumsum(inds$lengths)
start = c(1, head(end, -1) + 1)
data.frame(start, end)[inds$values, ]
}
get_inds(test, 'aa', 'J')
【问题讨论】:
-
在
search,1 是你要找的? -
不,1 是 C2 中的值
-
对不起,我不明白。你能解释一下
search("aa",1)在做什么吗?从输出来看,它似乎在 C2 中找到 aa==1,不是吗? -
抱歉造成混淆。我已经编辑了数据集以便更容易理解。在搜索功能中是我从 C1 和 C2 列输入的 2 个值。我期望的输出将是搜索输入的所有索引位置。希望有助于澄清。谢谢。