我有一个数据框,其中包含名为ride_length 的列,该列已经采用 hh:mm:ss 格式。我想计算该列的平均值,并通过其两个类别对其进行分组:成员和休闲(在 member_casual 列中找到)。
我已经用 lubridate 库尝试过这个管道:
df %>%
group_by(member_casual) %>%
seconds_to_period(mean(period_to_seconds(hms(ride_length))))
即使我的论点与网上找到的其他示例相同,我仍然收到此消息:
seconds_to_period(.,mean(period_to_seconds(hms(ride_length))))中的错误: 未使用的参数(平均值(period_to_seconds(hms(ride_length))))
我还通过这样做尝试了更长的路径:
df$nride_length <- difftime(strptime(df$ride_length,"%H:%M:%S"),
strptime("00:00:00","%H:%M:%S"),
units="mins")
df.means <- aggregate(df$nride_length,by=list(df$member_casual),mean)
df.means$ride_length <- format(.POSIXct(df.means$x,tz="GMT"), "%H:%M:%S")
df.means
但结果还是有问题:
Group.1 xride_length 1 休闲 NA 分钟 2 名会员 NA 分钟
我也尝试过总结:
df %>%
group_by(member_casual) %>%
summarise(length_mean = seconds_to_period(mean(period_to_seconds(hms(ride_length)))))
但是这表明:
member_casual length_mean
1 休闲 NA
2 名成员 NA
警告信息:
summarise()
中有 2 个警告。
第一个警告是:
ℹ 在争论中:length_mean = seconds_to_period(mean(period_to_seconds(hms(ride_length))))
。
ℹ 第 1 组:member_casual = "casual"
。
由.parse_hms()
中的警告引起:
!某些字符串解析失败,或者所有字符串都是 NA
ℹ 运行 dplyr::last_dplyr_warnings() 以查看剩余的 1 个警告。
请帮忙
您可以单独使用
aggregate()
。像使用方差分析一样指定分组。我稍微改变了 data.frame,所以有“会员”和“休闲”三个。
dtf <- structure(list(rideable_type=c("electric_bike",
"classic_bike", "classic_bike", "electric_bike",
"classic_bike", "classic_bike"), day_of_week=c(1, 1, 1, 6, 7,
2), ride_length=structure(c(990, 810, 576, 296, 686, 294),
class=c("hms", "difftime"), units="secs"),
member_casual=c("member", "member", "member", "casual",
"casual", "casual"), nride_length=structure(c(16.5, 13.5, 9.6,
4.93, 11.43, 4.9), class="difftime", units="mins")),
row.names=c(NA, -6L), class=c("tbl_df", "tbl", "data.frame"))
aggregate(ride_length ~ member_casual, data=dtf, mean)
# member_casual ride_length
# 1 casual 425.33333 secs
# 2 member 792.00000 secs
假设您的数据如下:
x <- c("09:10:01", "10:10:02", "09:40:03","07:10:16", "09:20:02", "08:52:10")
df <- data.frame(member_casual=c(rep('A',3),rep('B',3)),
ride_length=hms(x),stringsAsFactors = F)
df
member_casual ride_length
1 A 9H 10M 1S
2 A 10H 10M 2S
3 A 9H 40M 3S
4 B 7H 10M 16S
5 B 9H 20M 2S
6 B 8H 52M 10S
我尝试了您上面尝试过的代码,它对我来说效果很好。
df %>%
group_by(member_casual) %>%
summarise(mean=seconds_to_period(mean(period_to_seconds(ride_length))))
# A tibble: 2 × 2
member_casual mean
<chr> <Period>
1 A 9H 40M 2S
2 B 8H 27M 29.3333333333321S
所以请确认您的数据格式正确,尤其是名为“ride_length”的列,单独运行
hms(df$ride_length)
并检查它是否运行成功。