在R中按条件拆分数据行:将括号内标准误移至上一行
用R语言拆分回归系数与标准误为独立行
可以实现需求,以下提供两种解决方案:
方案一:使用tidyverse包(简洁易读)
# 先安装包(首次运行) # install.packages("tidyverse") library(tidyverse) # 原始数据 data <- data.frame( Variable = c('x1', 'x2', 'x3'), Coefficients_se1 = c('0.04 (0.03)', '', ''), Coefficients_se2 = c('', '0.08*** (0.01)', ''), Coefficients_se3 = c('', '', '0.02* (0.01)'), stringsAsFactors = FALSE ) # 定义行处理函数:拆分系数和标准误,生成两行 process_row <- function(row) { coeff_cols <- str_subset(names(row), "Coefficients_se") split_vals <- map(row[coeff_cols], ~{ if (.x != "") { list( coeff = str_extract(.x, "^[^(]+"), # 提取左括号前的系数部分 se = str_extract(.x, "\\(.*\\)") # 提取括号包裹的标准误 ) } else { list(coeff = "", se = "") } }) # 生成系数行和标准误行 row1 <- c(Variable = row$Variable, map_chr(split_vals, ~.x$coeff)) row2 <- c(Variable = "", map_chr(split_vals, ~.x$se)) bind_rows(as.data.frame(t(row1), stringsAsFactors = FALSE), as.data.frame(t(row2), stringsAsFactors = FALSE)) } # 批量处理所有行并合并结果 result <- map_dfr(data, process_row, .id = NULL) # 查看输出 print(result)
方案二:使用Base R(无需额外安装包)
# 原始数据 data <- data.frame( Variable = c('x1', 'x2', 'x3'), Coefficients_se1 = c('0.04 (0.03)', '', ''), Coefficients_se2 = c('', '0.08*** (0.01)', ''), Coefficients_se3 = c('', '', '0.02* (0.01)'), stringsAsFactors = FALSE ) # 初始化结果容器 result_rows <- list() # 逐行处理 for (i in 1:nrow(data)) { current_row <- data[i, ] coeff_cols <- which(grepl("Coefficients_se", names(current_row))) # 拆分系数和标准误 coeffs <- sapply(current_row[coeff_cols], function(x) { if (x == "") "" else sub("\\s*\\(.*\\)", "", x) }) ses <- sapply(current_row[coeff_cols], function(x) { if (x == "") "" else sub("^.*\\((.*)\\)$", "(\\1)", x) }) # 添加系数行和标准误行 result_rows[[length(result_rows)+1]] <- c(current_row$Variable, coeffs) result_rows[[length(result_rows)+1]] <- c("", ses) } # 转换为最终数据框 result <- as.data.frame(do.call(rbind, result_rows), stringsAsFactors = FALSE) names(result) <- names(data) # 查看输出 print(result)
两种方案都会生成你需要的格式:每个变量对应两行,第一行显示系数,第二行显示括号包裹的标准误,第二行的Variable列留空。
内容的提问来源于stack exchange,提问作者ph_9933
相关产品推荐
相关产品推荐

