如何用R将TXT文件单列拆分为12列并清理格式?
简单搞定R语言单列数据拆分与清洗
嗨,作为R语言新手碰到这种挤在一列里的数据集确实有点头大,我给你两个简单易上手的方法,不用复杂命令就能把数据拆成12列并清理格式,完全适合新手操作!
方法一:基础R + stringr(直观好理解)
首先确保你安装了stringr包(处理字符串的新手友好工具):
install.packages("stringr") # 仅需安装一次 library(stringr)
步骤分解:
- 读取数据:按行读取你的TXT文件,保留每行的完整字符串格式:
# 替换成你的实际文件路径 raw_data <- readLines("data.txt")
- 拆分键值对:把每一行按
;(分号加空格)拆成单个的「列名+值」单元:
split_rows <- strsplit(raw_data, "; ")
- 清理格式并转成数据框:遍历每个拆分后的行,去掉列名末尾的句点,拆分列名和值,最后合并成标准数据框:
cleaned_rows <- lapply(split_rows, function(row) { # 把每个「列名.: 值」拆成列名部分和值部分 kv_pairs <- strsplit(row, ": ") # 提取列名并去掉末尾的句点 col_names <- sapply(kv_pairs, function(pair) str_remove(pair[1], "\\.$")) # 提取对应的值 values <- sapply(kv_pairs, function(pair) pair[2]) # 转成单行数据框 as.data.frame(t(values), col.names = col_names, stringsAsFactors = FALSE) }) # 合并所有行得到最终数据框 final_df <- do.call(rbind, cleaned_rows)
方法二:tidyverse一站式处理(更简洁)
如果你愿意尝试tidyverse工具集(很多R新手入门都会用),可以用separate和pivot系列函数一步到位:
先安装并加载tidyverse:
install.packages("tidyverse") # 仅需安装一次 library(tidyverse)
然后运行以下代码:
final_df <- read_table("data.txt", col_names = "raw") %>% # 按"; "拆分成12个临时列(根据你的实际列数调整数字12) separate(raw, into = paste0("temp_", 1:12), sep = "; ") %>% # 遍历所有临时列,拆分列名和值,清理列名的句点 mutate(across(starts_with("temp_"), ~ str_split_fixed(., ": ", 2) %>% as_tibble() %>% rename(name = V1, value = V2) %>% mutate(name = str_remove(name, "\\.$")))) %>% # 转换数据格式,得到标准列结构 pivot_longer(starts_with("temp_"), values_to = "data") %>% unnest(data) %>% pivot_wider(names_from = name, values_from = value) %>% select(-name) # 移除临时辅助列
验证结果
运行完代码后,你可以用head(final_df)查看前几行数据,确认列名已经去掉了句点,每个值都在对应的列里,接下来就可以正常开展基础统计分析啦!
内容的提问来源于stack exchange,提问作者Patrick Fowler
相关产品推荐
相关产品推荐

