R语言如何按类别筛选出各类型对应最大骑行时长的行
R按用户类型提取最大骑行时长对应行的实现方法
原始数据框结构参考如下:
以下提供两种常用实现方案:
方案1:使用dplyr包(代码更简洁易读)
需要先安装加载dplyr和tibble包,假设你的原始数据框名为df,包含user_type(用户类型,取值为member/casual)、day_of_week(星期几)、ride_length(骑行时长)三列:
# 加载依赖包 library(dplyr) library(tibble) result <- df %>% group_by(user_type) %>% # 取每组骑行时长最大的1行,with_ties=FALSE表示多行列同最大值时仅返回第一条 slice_max(order_by = ride_length, n = 1, with_ties = FALSE) %>% ungroup() %>% rename(max_ride_length = ride_length) %>% # 将用户类型设为行名,匹配示例输出格式 column_to_rownames("user_type") %>% select(day_of_week, max_ride_length) # 输出结果 print(result)
方案2:Base R实现(无需额外安装依赖)
# 计算每类用户的最大骑行时长 max_duration <- aggregate(ride_length ~ user_type, data = df, FUN = max) # 匹配最大时长对应的原始行 result <- merge(max_duration, df, by = c("user_type", "ride_length")) # 去重,避免同最大值返回多行 result <- result[!duplicated(result$user_type), ] # 调整输出格式 colnames(result)[colnames(result) == "ride_length"] <- "max_ride_length" rownames(result) <- result$user_type result <- result[, c("day_of_week", "max_ride_length")] # 输出结果 print(result)
小提示:如果你的原始数据列名和上述假设不一致,替换代码中对应的列名即可。
内容的提问来源于stack exchange,提问作者Daniel Chen
相关产品推荐
相关产品推荐

