如何在R中统计true与pset各向量对应位置匹配1的数量?
解决方案
核心需求是:针对true字符串中所有为1的位置,统计pset里每个字符串在这些位置上同样为1的数量。以下是具体实现步骤:
步骤1:定义并预处理数据
先把数据转换成R可操作的对象,再拆分字符串为单个数字向量,锁定true中1的位置:
# 定义数据 pset <- list(c("000100", "100110", "101101", "101111", "100001", "100010")) true_str <- "100110" # 把true字符串拆分为单个数字的数值向量 true_vec <- as.integer(strsplit(true_str, "")[[1]]) # 提取true中值为1的位置索引 true_1_pos <- which(true_vec == 1)
步骤2:计算每个字符串的匹配数量
用sapply遍历pset中的每个字符串,提取对应位置的元素并统计1的数量:
result <- sapply(pset[[1]], function(x) { # 拆分当前字符串为数值向量 x_vec <- as.integer(strsplit(x, "")[[1]]) # 统计true中1的位置上,当前字符串同样为1的数量 sum(x_vec[true_1_pos] == 1) }) # 输出结果 print(result) # 得到:1 3 2 3 1 2
关于match函数的说明
match函数的作用是匹配向量元素的值,返回元素在另一向量中的位置,无法针对特定位置做条件统计,完全不适用你的场景。我们需要先拆分字符串到单个字符层面,锁定目标位置后再做针对性统计,这才是解决问题的核心思路。
内容的提问来源于stack exchange,提问作者zion
相关产品推荐
相关产品推荐

