2016-01-12 31 views
0

我试图创建一个函数,它将采用几个参数并返回总平均小时回报。我的数据集是这样的:为R中的子集创建均值函数

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)) 

其返回的位置和总台而不是每小时的单位。这里

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 

任何帮助非常赞赏:然后我搬到

thing <- time %>% group_by(Location) %>% summarize(sum(units)) %>% summarize(sum(Time)) 

其返回

Error in eval(expr, envir, enclos) : object 'Time' not found 

我也试过发生变异,但没有效果。我还有其他一些列,我想保留(他们是位置的地理编码等),但没有在这里列出。如果这很重要,我可以重新加入。

+1

对于初学者,“Play.Time”不是“时间”。另外,你如何像时间对象一样总结'12:05'?他们如何存储? – thelatemail

+0

啊是的,编辑的乐趣。 Play.Time是实际的变量,为了简单起见,我在这个问题中花了时间。编辑来解决这个问题。时间项目被存储为因子。它们是由lubridate生成的,虽然老实说我不记得我是如何生成它们的(一段时间以来一直在改进它)。 – ike

+0

我想我的回答已经过时了。你可以把dput(time)的输出加到你的问题上,使它更容易重现。 此外,行'thing <- time %>%group_by(Location)%>%summarize(sum(units))%>%summarize(sum(Time))'包含错误。见下面 – CAFEBABE

回答

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)) 

让我我想要的地方去。谢谢大家的许多有益的意见。

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对象,将其转换为双精度值。但是,猜一猜。 转换的数据

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

+0

我对此感兴趣:strptime做了什么?另外,我在这里打印了一个变量子集。总而言之,有8千条记录。 (目标是将所有这些用于闪亮的仪表板,被动项目)。 – ike

+2

@ike - '?'可以找到什么函数 - 例如'strptime' – thelatemail

+0

嗨thelatemail:谢谢你的建议。我更加好奇为什么这里的答案使用了它。例如,我从''strptime'知道%H将给定的时间转换为小数。我感兴趣的是他们为什么在这里做到这一点,而不是说,否则转换为整个单位。 – ike