R中跨多个数据集统计列名出现频次及所属数据框的方法
R 多数据集列名出现情况统计实现
首先修正你示例代码里的语法笔误:原d3定义行多写了一个<-,实际运行前需要先修正输入:
# 示例列名输入(修正原代码语法错误) d1 <- c("Institution", "Department", "Complete", "effective_goals", "recs_open", "mostvaluable_open", "learningdifferences_l", "studentmotivation_l") d2 <- c("Institution", "Department", "Complete", "effective_goals", "recs_open", "effective_tools", "learningdifferences_l") d3 <- c("Institution","Department", "Complete", "effective_goals", "effective_tools", "effective_assessment", "learningscience_freq")
实现方案
全程使用R基础函数实现,无需安装第三方包,核心逻辑如下:
- 将所有待统计的数据集列名存入命名列表,列表的名称为需要标注的数据集标识(如d1、d2、d3),列表值为对应数据集的列名向量
- 提取所有出现过的不重复列名,作为结果的第一列全集
- 逐列遍历判断每个列名在哪些数据集中存在,同步统计出现次数、拼接所属数据集名称
- 整理为三列结构的标准数据框
完整可运行代码:
# 1. 构造列名命名列表,后续新增数据集直接往列表中追加元素即可 col_list <- list( d1 = d1, d2 = d2, d3 = d3 ) # 如果你是直接操作真实的调查数据框对象(比如f2018、sum2015), # 可以跳过前面的示例列名定义,直接按下面的方式构造col_list: # col_list <- list( # d1 = colnames(f2018), # d2 = colnames(sum2015), # d3 = colnames(替换为第三个数据集的对象名) # ) # 2. 提取全量去重列名 all_cols <- unique(unlist(col_list)) # 3. 批量统计生成结果 col_stat <- data.frame( col_name = all_cols, appear_count = sapply(all_cols, function(col) sum(sapply(col_list, \(colset) col %in% colset))), belong_dataset = sapply(all_cols, function(col) paste(names(col_list)[sapply(col_list, \(colset) col %in% colset)], collapse = ", ")), row.names = NULL )
结果验证
运行代码后得到的col_stat完全匹配你给出的预期结构,输出如下:
col_name appear_count belong_dataset 1 Institution 3 d1, d2, d3 2 Department 3 d1, d2, d3 3 Complete 3 d1, d2, d3 4 effective_goals 3 d1, d2, d3 5 recs_open 2 d1, d2 6 mostvaluable_open 1 d1 7 learningdifferences_l 2 d1, d2 8 studentmotivation_l 1 d1 9 effective_tools 2 d2, d3 10 effective_assessment 1 d3 11 learningscience_freq 1 d3
内容的提问来源于stack exchange,提问作者sdS
相关产品推荐
相关产品推荐

