将向量与 R 中的多个连续行匹配
Match a vector to multiple consecutive rows in R
我有一个数据框,我需要找到行号,其中一列中的条目值与特定模式匹配。
设 col1 col1 = matrix(c(1,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,1), nrow = 21, ncol = 1)
为按列的示例,向量 r r = c(2, 0 ,2)
为我需要与之匹配的向量。
我需要 R 到 return 行的索引号,其中 r 中的模式与 col1 中的值匹配(在本例中为第 11、12、13 行)。
我以为我可以用row.match实现这个,但事实并非如此。我尝试了不同的匹配函数组合,但它也没有产生任何结果。
也许我处理这个问题的方式从一开始就是错误的,但我很难相信没有任何功能可以通过一些调整为我提供预期的结果。
谢谢。
您可以使用 zoo
中的 rollapply
来完成此操作。基本上,这会滚动运行 identical
,window 为 length(r)
。这告诉您该序列从 col1
向量的位置 11 开始存在..
library(zoo)
which(rollapply(col1,length(r),identical,r))
[1] 11
要获得位置向量,您可以这样做:
which(rollapply(col1,length(r),identical,r))+0:(length(r)-1)
[1] 11 12 13
我有一个数据框,我需要找到行号,其中一列中的条目值与特定模式匹配。
设 col1 col1 = matrix(c(1,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,1), nrow = 21, ncol = 1)
为按列的示例,向量 r r = c(2, 0 ,2)
为我需要与之匹配的向量。
我需要 R 到 return 行的索引号,其中 r 中的模式与 col1 中的值匹配(在本例中为第 11、12、13 行)。
我以为我可以用row.match实现这个,但事实并非如此。我尝试了不同的匹配函数组合,但它也没有产生任何结果。
也许我处理这个问题的方式从一开始就是错误的,但我很难相信没有任何功能可以通过一些调整为我提供预期的结果。
谢谢。
您可以使用 zoo
中的 rollapply
来完成此操作。基本上,这会滚动运行 identical
,window 为 length(r)
。这告诉您该序列从 col1
向量的位置 11 开始存在..
library(zoo)
which(rollapply(col1,length(r),identical,r))
[1] 11
要获得位置向量,您可以这样做:
which(rollapply(col1,length(r),identical,r))+0:(length(r)-1)
[1] 11 12 13