You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 10:21:04