基于ID与条件计算多行均值并重塑为宽格式
解决思路与代码实现
步骤1:修正数据类型
你用cbind创建的数据框会把value列转为字符型,首先要将其转回数值型:
df$value <- as.numeric(df$value)
步骤2:拆分condition列,提取核心信息
用字符串拆分工具分离condition中的参与者与分析项:
library(tidyr) df <- df %>% separate(condition, into = c("participant", "analysis"), sep = " - ")
步骤3:按参与者计算符合要求的均值
按participant分组,仅当该组非NA的有效数据≥2个时计算均值,否则返回NA:
library(dplyr) mean_df <- df %>% group_by(participant) %>% summarize( avg_value = ifelse(sum(!is.na(value)) >= 2, mean(value, na.rm = TRUE), NA) )
步骤4:重塑为宽格式
分两种场景实现:
- 场景1:仅展示参与者及其对应均值的宽表
wide_df <- mean_df %>% pivot_wider(names_from = participant, values_from = avg_value)
- 场景2:保留原始分析项,同时展示各参与者的分析值与均值
wide_full_df <- df %>% left_join(mean_df, by = "participant") %>% pivot_wider(names_from = participant, values_from = c(value, avg_value))
结果说明
运行后会得到符合预期的结果:
- Participant 1有6个有效值,均值为
4.1667 - Participant 2有5个有效值,均值为
5 - Participant 3无有效数据,均值保留NA
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

