如何对以Q开头的列,用str_detect()统计"0"的出现数量?
实现方法
首先你的原始数据定义如下:
tibble(Q1 = c("0","A"), Q2 = c("A","A"), Q3 = c("0","A"), C1 = c("A","0") ) -> DB
可以用两种高效的方式实现需求:
方法一:用rowSums结合across(推荐,效率更高)
DB %>% mutate(S = rowSums(across(starts_with("Q"), ~ .x == "0")))
starts_with("Q")精准筛选所有以"Q"开头的列~ .x == "0"将列中每个元素转换为布尔值(匹配"0"则为TRUE,对应数值1;否则为FALSE,对应数值0)rowSums对每行的布尔值求和,得到该行Q列中"0"的数量
方法二:用rowwise逐行计算
DB %>% rowwise() %>% mutate(S = sum(c_across(starts_with("Q")) == "0")) %>% ungroup()
rowwise()设置按行执行后续操作c_across(starts_with("Q"))将每行的Q列元素合并为一个向量- 对向量中的元素判断是否等于"0",再用
sum统计符合条件的数量 - 最后用
ungroup()取消按行分组状态
两种方法运行后都会得到你需要的结果:新增列S的值为c(2, 0)。
内容的提问来源于stack exchange,提问作者GiulioGCantone
相关产品推荐
相关产品推荐

