R语言数据整理:解析土壤数据文件
导入数据
data <- readLines('soil_data.txt')
去除空格
data <- gsub('\s+', ' ', data)
去除无用字符
data <- gsub('[*@-]', '', data)
去除空行
data <- data[nchar(data) > 0]
添加列名
colnames <- c('site_code', 'country', 'texture', 'depth', 'source', 'latitude', 'longitude', 'SCOM', 'SALB', 'SLU1', 'SLDR', 'SLRO', 'SLNF', 'SLPF', 'SMHB', 'SMPX', 'SMKE', 'SLB', 'SLMH', 'SLLL', 'SDUL', 'SSAT', 'SRGF', 'SSKS', 'SBDM', 'SLOC', 'SLCL', 'SLSI', 'SLCF', 'SLNI', 'SLHW', 'SLHB', 'SCEC', 'SADC')
data <- rbind(colnames, data)
将数据分割成多个数据框
data_list <- split(data, cumsum(grepl('^site_code', data)))
去除列名中的空格
names(data_list) <- lapply(names(data_list), function(x) gsub('\s+', '', x))
去除每个数据框第一行中的空格
data_list <- lapply(data_list, function(x) { x[1] <- gsub('\s+', '', x[1]) return(x) })
将每个数据框转换为数据框格式
data_list <- lapply(data_list, function(x) { x <- matrix(x, ncol = length(colnames), byrow = TRUE) x <- as.data.frame(x, stringsAsFactors = FALSE) return(x) })
合并所有数据框
final_data <- do.call(rbind, data_list)
将depth列转换为数字类型
final_data$depth <- as.numeric(final_data$depth)
将缺失值改为NA
final_data[final_data == '-99.0'] <- NA
查看数据结构
str(final_data)
原文地址: https://www.cveoy.top/t/topic/lZwK 著作权归作者所有。请勿转载和采集!