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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:05:16