根据条件 [R] 创建 names/indices 个向量重叠片段的列表
Create a list of names/indices of overlapping fragments of vector based on condition [R]
我想对 R 中的长向量执行滑动 window 分析。这样做时,我想检查该向量的给定片段是否包含特定值。
下面我粘贴了一个可重现的例子。该向量 (vctr) 包含 77 个元素(0 或 1)。我正在分析它,滑动 window 包含 10 个项目(段),重叠包含 5 个元素(重叠)。
我知道如何检查给定片段是否包含特定值(在本例中为 1)(split_vctr)。不过我还想做点别的,就是:
我想创建一个新变量(列表或向量),仅包含满足给定标准的那些片段的索引(在这种情况下:至少包含一个等于 1 的值;在这种情况下:TRUE ).
假设初始列表将被命名 - 我如何才能只提取真实的片段名称?
非常感谢您的帮助。
虚拟数据:
# dummy vector
vctr <- c(rep(0, 11), rep(1, 4), rep(0, 25), rep(1, 3), rep(0, 31),rep(1, 3))
# split parameters:
segment <- 10 # length of each segment
overlap <- 5 # length of each overlapping part
#finding coordinates
start_coordinates <- seq(1, length(vctr), by=segment-overlap)
end_coordinates <- start_coordinates + segment - 1
#check whether splitted vector fragments meet a condition
split_vctr <- lapply(1:length(start_coordinates), function(i) 1 %in% vctr[start_coordinates[i]:end_coordinates[i]])
which(unlist(split_vctr))
将 return split_vctr
的索引为 TRUE
如果 split_vctr
本身被命名,您可以使用这些索引来提取 TRUE 片段的名称,如下所示:
names(split_vctr)[which(unlist(split_vctr))]
我想对 R 中的长向量执行滑动 window 分析。这样做时,我想检查该向量的给定片段是否包含特定值。
下面我粘贴了一个可重现的例子。该向量 (vctr) 包含 77 个元素(0 或 1)。我正在分析它,滑动 window 包含 10 个项目(段),重叠包含 5 个元素(重叠)。
我知道如何检查给定片段是否包含特定值(在本例中为 1)(split_vctr)。不过我还想做点别的,就是:
我想创建一个新变量(列表或向量),仅包含满足给定标准的那些片段的索引(在这种情况下:至少包含一个等于 1 的值;在这种情况下:TRUE ).
假设初始列表将被命名 - 我如何才能只提取真实的片段名称?
非常感谢您的帮助。
虚拟数据:
# dummy vector
vctr <- c(rep(0, 11), rep(1, 4), rep(0, 25), rep(1, 3), rep(0, 31),rep(1, 3))
# split parameters:
segment <- 10 # length of each segment
overlap <- 5 # length of each overlapping part
#finding coordinates
start_coordinates <- seq(1, length(vctr), by=segment-overlap)
end_coordinates <- start_coordinates + segment - 1
#check whether splitted vector fragments meet a condition
split_vctr <- lapply(1:length(start_coordinates), function(i) 1 %in% vctr[start_coordinates[i]:end_coordinates[i]])
which(unlist(split_vctr))
将 return split_vctr
的索引为 TRUE
如果 split_vctr
本身被命名,您可以使用这些索引来提取 TRUE 片段的名称,如下所示:
names(split_vctr)[which(unlist(split_vctr))]