R搜索功能到return开始和结束位置
R search function to return start and end location
我需要编写一个搜索函数来使用 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" 对数据集进行子集化;然后根据这个子集提供索引。
结果将 return 在如下矩阵中找到的所有位置的索引:
[,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')
@markus提供的link解决了你的问题,你需要根据自己的需要修改。
get_inds <- function(test, a, b) {
test <- subset(test, C1 == a)
inds <- rle(test$C1 == a & test$C2 == b)
end = cumsum(inds$lengths)
start = c(1, head(end, -1) + 1)
df = data.frame(start, end)[inds$values, ]
row.names(df) <- NULL
df
}
get_inds(test, 'aa', 'J')
# start end
#1 1 3
#2 5 8
#3 10 11
您需要更改rle
的条件并删除不满足条件的行。
我需要编写一个搜索函数来使用 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" 对数据集进行子集化;然后根据这个子集提供索引。
结果将 return 在如下矩阵中找到的所有位置的索引:
[,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')
@markus提供的link解决了你的问题,你需要根据自己的需要修改。
get_inds <- function(test, a, b) {
test <- subset(test, C1 == a)
inds <- rle(test$C1 == a & test$C2 == b)
end = cumsum(inds$lengths)
start = c(1, head(end, -1) + 1)
df = data.frame(start, end)[inds$values, ]
row.names(df) <- NULL
df
}
get_inds(test, 'aa', 'J')
# start end
#1 1 3
#2 5 8
#3 10 11
您需要更改rle
的条件并删除不满足条件的行。