我正在尝试创建一个函数,该函数将采用一些参数并返回总平均每小时回报。我的数据集如下所示:
Location Time units
1 Columbus 3:35 12
2 Columbus 3:58 199
3 Chicago 6:10 -45
4 Chicago 6:19 87
5 Detroit 12:05 -200
6 Detroit 0:32 11
我想要归还的是
Location Time units unitsph
Columbus 7:33 211 27.9
Chicago 12:29 42 3.4
Detroit 12:37 -189 -15.1
同时还保留其他项目
基本上生产的总单位和每小时的单位。
我试过了
thing <- time %>% group_by(Location) %>% summarize(sum(units))
返回的位置和总单位,但不是每小时的单位。然后我搬到了
thing <- time %>% group_by(Location) %>% summarize(sum(units)) %>% summarize(sum(Time))
返回
Error in eval(expr, envir, enclos) : object 'Time' not found
我也试过变异但没有效果:
fin <- mutate(time, as.numeric(sum(Time))/as.numeric(sum(units)))
Error in Summary.factor(c(118L, 131L, 174L, 178L, 57L), na.rm = FALSE) :
‘sum’ not meaningful for factors
这里的任何帮助都非常感谢。我还有一些我想保留的其他专栏(它们是地点的地理编码等),但没有列出这些。如果这很重要,我可以重新加入。
答案 0 :(得分:2)
您的时间是一个字符串对象。你可以使用
data <- data.frame(loc=c("C","C","D","D"),time=c("1:22","1:23","1:24","1:25"),u=c(1,2,3,4))
basetime <- strptime("00:00","%H:%M")
data$in.hours <- as.double(strptime(data$time,"%H:%M")-basetime)
thing <- data %>% group_by(loc) %>% summarize(sum(u),sum(in.hours))
转换成小时并不完美。它首先将时间转换为Posix.ct对象,然后将其转换为double。但是猜猜好吧。 转换后的数据
loc time u in.hours
1 C 1:22 1 1.366667
2 C 1:23 2 1.383333
3 D 1:24 3 1.400000
4 D 1:25 4 1.416667
所以1.366
表示1h + 1/3h
。
最后的结果是
loc sum(u) sum(in.hours)
(fctr) (dbl) (dbl)
1 C 3 2.750000
2 D 7 2.816667
因此,对于C
,您有2小时0.75*60 minutes
答案 1 :(得分:1)
我最终参与了@CAFEBABE推荐和修改的部分内容。
我用过
mutated_time <- time %>%
group_by(Location) %>%
summarize(play
= sum(as.numeric(Time)/60),
unitsph = sum(units))
加上
selektor <- as.data.frame(select(distinct(mutated_time), Location,unitsph))
让我到了我想去的地方。谢谢大家提供的许多有用的评论。