R中合并时序CSV文件及分组统计分析的疑问
R/RStudio多时序CSV文件处理与统计分析方案
一、控制台返回信息解读
那串输出是read_csv的默认提示:
Rows: 24148 Columns: 3:成功读取24148行、3列数据(原两列+新增的file_name列)Delimiter: ",":识别到CSV文件的分隔符是逗号dbl (2): time, stride_int:判定time和stride_int为双精度数值型(浮点数字)- 最后两行提示:可以用
spec(df)查看完整列类型规格;如果不想看到这个提示,下次读取时加参数show_col_types = FALSE,比如readr::read_csv(list_of_files, id = "file_name", show_col_types = FALSE)
二、提取file_name中的受试者编号
当前file_name显示完整路径,用以下代码提取subject_1这类纯编号名:
# 先安装/加载stringr包(未安装则运行install.packages("stringr")) library(stringr) # 精准提取subject_开头的编号部分 df$subject_id <- str_extract(df$file_name, "subject_\\d+") # 或者用基础包工具提取文件名并去掉后缀 df$subject_id <- tools::file_path_sans_ext(basename(df$file_name))
三、修正受试者排序问题
当前数据是字典序排列(subject_1→subject_11→subject_2...),需要转换成数值排序:
# 提取编号中的数字并转为整数 df$subject_num <- as.integer(str_extract(df$subject_id, "\\d+")) # 按数字升序重新排列数据 df <- df[order(df$subject_num), ] # 可删除不需要的辅助列 df <- df[, !names(df) %in% c("file_name", "subject_num")]
四、合并数据VS循环遍历的选择
优先合并成单个大DataFrame,后续用dplyr包做分组统计更简洁高效,代码量更少、可读性更强,适合新手操作。
五、按组别统计均值与标准差
首先需要创建受试者-组别映射表,再合并数据后完成统计:
# 安装/加载dplyr包(未安装则运行install.packages("dplyr")) library(dplyr) # 1. 创建分组映射表(替换为你的实际分组规则) group_mapping <- tibble( subject_id = paste0("subject_", 1:50), group = c(rep("健康青年", 15), rep("PD患者", 20), rep("健康老年", 15)) ) # 2. 合并主数据与分组表 df_merged <- df %>% left_join(group_mapping, by = "subject_id") # 3. 按组别统计stride_int的均值和标准差 group_stats <- df_merged %>% group_by(group) %>% summarize( stride_int_mean = mean(stride_int, na.rm = TRUE), # na.rm=TRUE忽略缺失值 stride_int_sd = sd(stride_int, na.rm = TRUE) ) # 查看统计结果 print(group_stats)
内容的提问来源于stack exchange,提问作者NLC
相关产品推荐
相关产品推荐

