R语言如何按日期汇总数据集中每日跑步和睡眠的总时长
R语言按日期汇总指定活动耗时的实现方案
方案1:使用tidyverse生态实现(代码更简洁,推荐)
首先确保你已经安装了tidyverse包,执行以下代码即可完成转换:
# 加载依赖包 library(tidyverse) # 替换df为你自己的原始数据框名称 output_df <- df %>% # 筛选出跑步、睡眠两类活动的记录 filter(Activity %in% c("run", "sleep")) %>% # 按日期、活动类型分组,统计总耗时,此处统计的是分钟总和,需要小时的话把minutes改成hours即可 group_by(date, Activity) %>% summarise(total = sum(minutes), .groups = "drop") %>% # 长表转宽表 pivot_wider( id_cols = date, names_from = Activity, values_from = total ) %>% # 重命名为你需要的列名 rename( time_running = run, time_sleeping = sleep )
如果需要无对应活动的日期显示0而非空值(NA),可以在pivot_wider的参数里添加values_fill = 0。
方案2:使用base R实现(无需安装额外依赖)
如果你不想安装第三方包,可以用R原生函数完成转换:
# 替换df为你自己的原始数据框名称 # 1. 筛选目标活动记录 sub_df <- df[df$Activity %in% c("run", "sleep"), ] # 2. 按日期和活动分组求和 agg_df <- aggregate(minutes ~ date + Activity, sub_df, sum) # 3. 长表转宽表 wide_df <- reshape(agg_df, idvar = "date", timevar = "Activity", direction = "wide") # 4. 补全所有日期并重命名列 all_date_df <- data.frame(date = unique(df$date)) output_df <- merge(all_date_df, wide_df, by = "date", all.x = TRUE) colnames(output_df) <- c("date", "time_running", "time_sleeping")
内容的提问来源于stack exchange,提问作者Bix
相关产品推荐
相关产品推荐

