如何将问卷语言使用频率答复转换为结构化表格(已用strsplit拆分)
问卷答复转结构化表格解决方案
以下是基于R语言的具体处理步骤,承接你已使用strsplit(x, "\r\n")的操作,继续完成数据结构化:
1. 数据预处理
先清理原始答复中的冗余引号,并拆分每条答复的具体条目:
# 原始问卷答复数据 responses <- c( "\"A - Spanish 60 \\r\\nB - Both of them 10 \\r\\n C - English 30\"", "\"B - Both of them 50 \\r\\n C - English 50\"", "\"A - Spanish 30 \\r\\nC - English 70\"" ) # 清理引号并拆分条目(保留你已用的strsplit逻辑,补充清理步骤) clean_items <- lapply(responses, function(x) { # 去除首尾双引号 x <- gsub("^\"|\"$", "", x) # 按\r\n拆分后去除每个条目的前后空格 strsplit(x, "\\r\\n")[[1]] |> trimws() })
2. 映射类别并填充数值
定义A/B/C对应的列名,遍历每个条目提取数值,缺失类别自动填充0:
# 定义类别与目标列的映射关系 cat_map <- c("A" = "Spanish", "B" = "Both of them", "C" = "English") # 处理每个答复的条目,生成结构化数据 structured_data <- lapply(clean_items, function(items) { # 初始化所有列值为0 row_data <- setNames(rep(0, 3), cat_map) # 遍历每个条目提取数值 for(item in items) { # 拆分条目获取类别代码和数值 split_parts <- strsplit(item, " - | ")[[1]] code <- split_parts[1] num_val <- as.numeric(split_parts[length(split_parts)]) # 赋值到对应列 row_data[cat_map[code]] <- num_val } row_data })
3. 生成最终表格
将处理后的列表转换为数据框,得到目标结构化表格:
# 转换为数据框 final_table <- do.call(rbind, structured_data) |> as.data.frame() # 重置行名为序号(可选) rownames(final_table) <- NULL # 输出结果 print(final_table)
运行后输出的结果即为:
Spanish Both of them English 1 60 10 30 2 0 50 50 3 30 0 70
内容的提问来源于stack exchange,提问作者R18
相关产品推荐
相关产品推荐

