按日期和治疗分组

时间:2014-05-24 20:12:51

标签: r statistics

我有一个关于咖啡因如何影响考试成绩的时间序列。在每一天,第一个测试用于测量当天的基线分数,第二个分数是治疗的效果。

 Post Caffeine  Score     Time/Date
yes        10   3/17/2014 17:58:28
no          9   3/17/2014 23:55:47
no          7   3/18/2014 18:50:50
no         10   3/18/2014 23:09:03

有些日子有咖啡因治疗,有些则没有。这是一个问题:如何按一周的对变量进行分组,并通过减去第二天来创建影响度量。从第一个得分。

我将使用这些分组进行后续的图表和分析,所以我认为如果能够创建每天评分得分改善的对象,那么效率最高。根据是否使用咖啡因(治疗)来分组。

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

首先为当天制作一个专栏:

df$day = strftime(df$'Time/Date', format="%Y-%m-%d")

然后我认为你所追求的是两个聚合:

1)查找当天是否有咖啡因

dayCaf = aggregate(df$Caffeine~df$day, FUN=function(x) ifelse(length(which(grepl("yes",x)))>0,1,0))

2)计算得分差异

dayDiff = aggregate(df$Score~df$day, FUN=function(x) x[2]-x[1])

现在把两者放在一起

out = merge(dayCaf, dayDiff, by='df$day')

这给出了:

      df$day df$caff df$score
1 2014-03-17       1       -1
2 2014-03-18       0        3

整个代码是:

df$day = strftime(df$'Time/Date', format="%Y-%m-%d")
dayCaf = aggregate(df$Caffeine~df$day, FUN=function(x) ifelse(length(which(grepl("yes",x)))>0,1,0))
dayDiff = aggregate(df$Score~df$day, FUN=function(x) x[2]-x[1])
out = merge(dayCaf, dayDiff, by='df$day')

只需将“df”替换为您的框架名称即可。

答案 1 :(得分:0)

可替换地:

DF <- data.frame(Post.Caffeine = c("Yes","No","No","No"),Score=c(10,9,7,10),Time.Date=c("3/17/2014 17:58:28","3/17/2014 23:55:47","3/18/2014 18:50:50", "3/18/2014 23:09:03"))

DF$Time.Date <- as.Date(DF$Time.Date,format="%m/%d/%Y")
DF2 <- setNames(aggregate(Score~Time.Date,DF,diff),c("Date","Diff"))
DF2$PC <- DF2$Date %in% DF$Time.Date[DF$Post.Caffeine=="Yes"]

DF2

编辑:这假设您的数据符合您演示的顺序。

答案 2 :(得分:0)

data.table解决方案。 order部分首先对您的数据进行排序(如果已对其进行排序,则可以删除order部分,只需将逗号留在原位)。这种方法的优点是你在一行中完成整个过程,而且它也会很快

library(data.table)
setDT(temp)[order(as.POSIXct(strptime(`Time/Date`, "%m/%d/%Y %H:%M:%S"))), 
    list(HadCafffeine = if(any(PostCaffeine == "yes")) "yes" else "no", 
         Score = diff(Score), 
         by = as.Date(strptime(`Time/Date`, "%m/%d/%Y"))]

##       as.Date HadCafffeine Score
## 1: 2014-03-17          yes    -1
## 2: 2014-03-18           no     3

此解决方案假定temp为您的数据集,PostCaffeine而不是Post Caffeine作为变量名称(在R中将空格或/放入变量名称是不好的做法因为它限制了你与他们合作的可能性。)