R语言如何统计数据框多列及列组合的非空字符串行数
R语言多列非空值及组合共现统计方案
实现代码
无需安装第三方包,base R即可实现需求:
# 定义待统计的目标列 target_cols <- c("FirstCon", "SeconCon", "Upcond") # 生成非空标记矩阵:非空字符串标记为TRUE,空字符串标记为FALSE non_empty_mat <- as.data.frame( lapply(df[target_cols], function(x) x != "") ) # 计算单列非空行数 single_count <- colSums(non_empty_mat) # 计算两两列同时非空的行数 pair_combs <- combn(target_cols, 2, simplify = FALSE) pair_count <- sapply(pair_combs, function(col_group) { sum(rowSums(non_empty_mat[col_group]) == length(col_group)) }) names(pair_count) <- sapply(pair_combs, paste0, collapse = "") # 计算三列同时非空的行数 triple_count <- sum(rowSums(non_empty_mat[target_cols]) == length(target_cols)) names(triple_count) <- paste0(target_cols, collapse = "") # 合并输出最终结果 final_result <- as.data.frame(t(c(single_count, pair_count, triple_count)))
输出结果
运行后得到的final_result完全匹配预期格式:
FirstCon SeconCon Upcond FirstConSeconCon FirstConUpcond SeconConUpcond FirstConSeconConUpcond 1 11 4 3 4 2 2 2
统计规则说明
- 单字段统计:对每个目标列,统计列内非空字符串的总行数。
- 多字段组合统计:逐行判断组合内所有字段是否均为非空字符串,满足条件的行计入计数,不要求不同字段的字符串内容一致。例如
FirstConSeconCon计数为4,对应数据中第4、10、11、12行;三列同时非空的行为第4、12行,对应计数为2,和需求完全吻合。
内容的提问来源于stack exchange,提问作者nik
相关产品推荐
相关产品推荐

