如何在R语言中将向量数据按|拆分为col1-col6共6列
解决方案:将R向量按分隔符拆分为指定列名的数据框
方法一:使用tidyverse工具包(推荐)
借助tidyverse中的tidyr和dplyr工具完成数据处理,步骤如下:
library(tidyverse) # 原始向量 df <-c("*| Characteristic | class1 \n(N=2)\nn (%) | class2 \n(N=4)\nn (%) | class3 \n(N=2)\nn (%) | class4 \n(N=6)\nn (%) | class\nOverall\n(N=14)\nn (%) | ", "*| Age (years) [2] | | | | | | ", "*| n | 2 | 4 | 2 | 6 | 14 | ", "*| Mean (SD) | 64.0 (5.66) | 65.3 (11.41) | 29.0 (7.07) | 68.8 (14.47) | 61.4 (17.59) | ", "*| Median | 64.0 | 68.5 | 29.0 | 69.5 | 64.0 | ", "*| Min, Max | 60, 68 | 50, 74 | 24, 34 | 45, 84 | 24, 84 | " ) # 转换为数据框并完成拆分、清理、重命名 result_df <- tibble(raw = df) %>% mutate(split_list = str_split(raw, "\\|")) %>% unnest_wider(split_list, names_sep = "_") %>% select(split_list_2:split_list_7) %>% mutate(across(everything(), ~ trimws(gsub("\n", " ", .x)))) %>% rename_with(~ paste0("col", 1:6)) # 查看最终结果 print(result_df, width = Inf)
方法二:基础R实现(无需额外包)
如果不想加载第三方包,用基础R也能完成需求:
# 原始向量 df <-c("*| Characteristic | class1 \n(N=2)\nn (%) | class2 \n(N=4)\nn (%) | class3 \n(N=2)\nn (%) | class4 \n(N=6)\nn (%) | class\nOverall\n(N=14)\nn (%) | ", "*| Age (years) [2] | | | | | | ", "*| n | 2 | 4 | 2 | 6 | 14 | ", "*| Mean (SD) | 64.0 (5.66) | 65.3 (11.41) | 29.0 (7.07) | 68.8 (14.47) | 61.4 (17.59) | ", "*| Median | 64.0 | 68.5 | 29.0 | 69.5 | 64.0 | ", "*| Min, Max | 60, 68 | 50, 74 | 24, 34 | 45, 84 | 24, 84 | " ) # 拆分每行数据为矩阵 split_mat <- do.call(rbind, str_split(df, "\\|")) # 提取目标列并清理数据 result_df_base <- as.data.frame( apply(split_mat[,2:7], 2, function(x) trimws(gsub("\n", " ", x))) ) # 设置列名 colnames(result_df_base) <- paste0("col", 1:6) # 查看结果 print(result_df_base, width = Inf)
最终效果
两种方法都会生成列名为col1至col6的数据框,同时完成了空格、换行符的清理,完全匹配需求。
内容的提问来源于stack exchange,提问作者Stataq
相关产品推荐
相关产品推荐

