在R语言中匹配向量元素与目标字符串的1的位置
仅匹配指定位置为1的字符匹配实现(R语言)
原始代码
pset[[1]] <- c("000100", "100110", "001000", "100000", "100001", "100010") true <- "000110"
需求说明
需要筛选出pset[[1]]中,所有在true值为1的位置上同样为1的元素索引。例如true的第4、5位是1,pset[[1]]的第二个元素对应位置也为1,期望得到索引结果(若按0起始计数则为1,R默认1起始则为2)。
实现代码
# 提取true中字符为1的位置(按1起始计数) true_1_pos <- which(strsplit(true, "")[[1]] == "1") # 遍历pset[[1]]的每个元素,检查指定位置是否全为1 is_match <- sapply(pset[[1]], function(x) { x_chars <- strsplit(x, "")[[1]] all(x_chars[true_1_pos] == "1") }) # 获取符合条件的元素索引 # R默认1起始结果 result_1based <- which(is_match) # 0起始结果(对应用户期望的1) result_0based <- which(is_match) - 1 print(result_1based) # 输出 [1] 2 print(result_0based) # 输出 [1] 1
代码说明
strsplit(true, "")[[1]]将true拆分为单个字符的向量,再用which定位值为"1"的位置。sapply遍历pset[[1]]的每个元素,拆分后检查指定位置是否全部为"1",返回逻辑向量。which把逻辑向量转换为符合条件的元素索引,可根据计数习惯选择1起始或0起始的结果。
内容的提问来源于stack exchange,提问作者PRITI
相关产品推荐
相关产品推荐

