R 按星期几筛选数据帧

R 按星期几筛选数据帧,r,dataframe,lapply,sapply,R,Dataframe,Lapply,Sapply,我有一个网站的每日统计数据框架 > head(df,7) date users sessions goalCompletionsAll dow gos gou 1 2014-08-01 3514 5239 90 Friday 0.01717885 0.02561184 2 2014-08-02 3382 4874 99 Saturday 0.0

我有一个网站的每日统计数据框架

> head(df,7)
        date users sessions goalCompletionsAll       dow        gos        gou
1 2014-08-01  3514     5239                 90    Friday 0.01717885 0.02561184
2 2014-08-02  3382     4874                 99  Saturday 0.02031186 0.02927262
3 2014-08-03  3981     5499                 81    Sunday 0.01472995 0.02034665
4 2014-08-04  4493     6434                 99    Monday 0.01538701 0.02203428
5 2014-08-05  4344     6505                111   Tuesday 0.01706380 0.02555249
6 2014-08-06  4091     6117                115 Wednesday 0.01880007 0.02811049
7 2014-08-07  3617     5519                 90  Thursday 0.01630730 0.02488250
我需要找到一周中每天的平均值。 这是我的尝试:

> daysOfWeek
[1] "Monday"    "Tuesday"   "Wednesday" "Thursday"  "Friday"    "Saturday"  "Sunday"
dailyAverages <- sapply(daysOfWeek, function (x) {
  qq <- filter(df, dow==x)
  convRate <- qq$goalCompletionsAll/qq$users
  run <- data.frame(mean(convRate),sd(convRate), 
  max(convRate), min(convRate), median(convRate))
  names(run) <- c("Mean", "SD", "Max", "Min", "Median")
  run
})

> dailyAverages
       Monday      Tuesday     Wednesday   Thursday    Friday     Saturday   
Mean   0.02496614  0.0262649   0.02576256  0.02602963  0.026684   0.02440045 
SD     0.003603139 0.004615455 0.003891674 0.004525479 0.00445875 0.004779429
Max    0.03266055  0.03274712  0.03141136  0.03543914  0.03673769 0.033213   
Min    0.01853659  0.01748487  0.01904376  0.02026432  0.01734417 0.01593625 
Median 0.02488883  0.02651838  0.02629004  0.02543797  0.02599134 0.02502503 
       Sunday     
Mean   0.02426048 
SD     0.004086276
Max    0.03112314 
Min    0.01581155 
Median 0.02456262 
>daysOfWeek
[1] “星期一”“星期二”“星期三”“星期四”“星期五”“星期六”“星期日”

每日平均值您可以尝试
dplyr
。链条/管道操作员(
%%>%%
)将“lhs”和“rhs”连接在一起。变量“dow”用作分组变量(
group\U by(..
),使用
transmute
计算“convRate”,这将删除现有变量,获得“convRate”的
平均值
sd
等使用
summary_each
summary_each
的优点是它可以同时用于多个列

library(dplyr)
df$dow <- substr(df$dow, 1,3)
res <- df %>%
          group_by(dow) %>% 
          transmute(convRate=goalCompletionsAll/users) %>% 
          summarise_each(funs(mean, sd, max, min, median), convRate)
indx <- match(c('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'), res$dow)
res1 <- res[indx,]
库(dplyr)
df$道指%
转换(convRate=goalCompletionsAll/用户)%>%
总结每个(funs(平均值、标准差、最大值、最小值、中位数)、置信区间)

indx您可以尝试
dplyr
。链/管道操作符(
%%>%%
)将“lhs”和“rhs”连接在一起。变量“dow”用作分组变量(
group\U by(…
),计算“convRate”使用
transmute
删除现有变量,使用
summary\u each
获得“convRate”的
mean
sd
等。
summary\u each
的优点是它可以同时用于多个列

library(dplyr)
df$dow <- substr(df$dow, 1,3)
res <- df %>%
          group_by(dow) %>% 
          transmute(convRate=goalCompletionsAll/users) %>% 
          summarise_each(funs(mean, sd, max, min, median), convRate)
indx <- match(c('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'), res$dow)
res1 <- res[indx,]
库(dplyr)
df$道指%
转换(convRate=goalCompletionsAll/用户)%>%
总结每个(funs(平均值、标准差、最大值、最小值、中位数)、置信区间)

indx在R中有大量的工具可以实现这一点。查看包plyr、data.table或dplyr。一个值不应该有标准偏差,对吗?@RichardScriven你是对的。这将采用“平均值”这是错误的。尽管如此,问题是关于转换数据的,akrun在下面给出了一个非常有价值的答案。在R中有大量的工具可用于转换。查看包plyr、data.table或dplyr。一个值不应该有标准差,对吗?@RichardScriven你是对的。这将需要“平均值”是错误的。尽管如此,问题是关于转换数据的,akrun在下面给出了一个非常有价值的答案。这几乎是我想要的。我没有对每一个进行变异,而是使用了每个摘要,因为我需要一个摘要。你能帮我安排第一列(道琼斯指数)吗我知道我需要使用排列功能,但我不知道如何使用预定义的顺序(周一、周二、周三……)@IngvarPetrov我更新了帖子。你也可以在指定级别后将
dow
转换为factor列后使用
arrange
进行更新。在这里,我使用match。这几乎是我想要的。我使用summary\u each而不是mutate\u,因为我需要一个摘要。你能帮我安排第一列(dow)吗到星期几?我知道我需要使用排列功能,但我不知道如何使用预定义的顺序(周一、周二、周三…)@IngVarportov我更新了帖子。你也可以在指定级别后将
dow
转换为factor列后使用
arrange
。这里,我使用的是match。