循环以使用dplyr在R中获得t.test结果 [英] Looping to get t.test result in R using dplyr

查看:17
本文介绍了循环以使用dplyr在R中获得t.test结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的数据

## Data
datex <- c(rep("2021-01-18", 61), rep("2021-01-19", 125))
hourx <- c(0,1,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,16,10,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,11,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,15,15,15,15,16,16,16,16)
seller <- c("dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp2","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2","dombsdpapp1","dombsdpapp1","dombsdpapp2","dombsdpapp2")
product <- c("00021460","00021460","00021460","00021459","00021460","00021459","00021460","00021459","00021460","00021459","00021460","00021459","00021460","00021460","00021459","00021460","00021459","00021460","00021459","00021460","00021459","00021460","00021459","00021459","00021460","00021459","00021460","00021460","00021460","00021459","00021459","00021460","00021459","00021459","00021460","00021460","00021459","00021459","00021460","00021459","00021460","00021459","00021460","00021459","00021460","00021460","00021459","00021459","00021460","00021460","00021459","00021459","00021460","00021460","00021459","00021460","00021459","00021460","00021459","00021460","00021459","00021459","00021460","00021459","00021459","00021459","00021460","00021459","00021459","00021460","00021460","00021459","00021459","00021460","00021460","00021459","00021460","00021460","00021460","00021459","00021459","00021460","00021459","00021459","00021460","00021459","00021460","00021460","00021459","00021460","00021459","00021460","00021459","00021459","00021460","00021460","00021460","00021460","00021459","00021459","00021460","00021459","00021459","00021460","00021460","00021459","00021459","00021459","00021460","00021460","00021459","00021460","00021459","00021460","00021459","00021459","00021459","00021460","00021460","00021460","00021460","00021459","00021459","00021459","00021459","00021460","00021460","00021459","00021459","00021460","00021460","00021459","00021459","00021460","00021460","00021459","00021460","00021459","00021460","00021460","00021459","00021460","00021459","00021460","00021460","00021459","00021460","00021459","00021460","00021459","00021459","00021460","00021460","00021459","00021459","00021460","00021460","00021460","00021459","00021460","00021459","00021459","00021459","00021460","00021460","00021459","00021459","00021460","00021460","00021460","00021459","00021459","00021460","00021459","00021459","00021459","00021460","00021460","00021460","00021460","00021460","00021460","00021460","00021460","00021460","00021460")
detail <- c("E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","notEnoughBalance","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","E99","notEnoughBalance","E99","success","success","success","E99","success","success","E99","success","E99","success","E99","E99","success","E99","E99","success","E99","success","E99","success","E99","success","E99","success","success","E99","E99","E99","success","success","E99","success","E99","success","E99","success","success","E99","E99","E99","success","E99","success","success","E99","E99","success","E99","success","E99","success","success","E99","E99","success","success","E99","E99","success","E99","success","success","E99","success","E99","success","E99","E99","success","success","E99","E99","success","E99","success","success","E99","E99","E99","success","success","notEnoughBalance","E99","success","success","E99","success","E99","success","notEnoughBalance","E99","success","E99","E99","success","E99","success","success","E99","success","E99","E99","success","E99","success","success","E99","success","success","E99","E99","success","notEnoughBalance","E99","E99","success","E99","success","success","E99","E99","success","success","E99")
status <- c("FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","OK01","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","FI04","OK01","FI04","OK00","OK00","OK00","FI04","OK00","OK00","FI04","OK00","FI04","OK00","FI04","FI04","OK00","FI04","FI04","OK00","FI04","OK00","FI04","OK00","FI04","OK00","FI04","OK00","OK00","FI04","FI04","FI04","OK00","OK00","FI04","OK00","FI04","OK00","FI04","OK00","OK00","FI04","FI04","FI04","OK00","FI04","OK00","OK00","FI04","FI04","OK00","FI04","OK00","FI04","OK00","OK00","FI04","FI04","OK00","OK00","FI04","FI04","OK00","FI04","OK00","OK00","FI04","OK00","FI04","OK00","FI04","FI04","OK00","OK00","FI04","FI04","OK00","FI04","OK00","OK00","FI04","FI04","FI04","OK00","OK00","OK01","FI04","OK00","OK00","FI04","OK00","FI04","OK00","OK01","FI04","OK00","FI04","FI04","OK00","FI04","OK00","OK00","FI04","OK00","FI04","FI04","OK00","FI04","OK00","OK00","FI04","OK00","OK00","FI04","FI04","OK00","OK01","FI04","FI04","OK00","FI04","OK00","OK00","FI04","FI04","OK00","OK00","FI04")
channel <- c("f2","f2","f2","f3","f2","f3","f2","f3","f2","f3","f2","f3","f2","f2","f3","f2","f3","f2","f3","f2","f3","f2","f3","f3","f2","f3","f2","f2","f2","f3","f3","f2","f3","f3","f2","f2","f3","f3","f2","f3","f2","f3","f2","f3","f2","f2","f3","f3","f2","f2","f3","f3","f2","f2","f3","f2","f3","f2","f3","f2","f3","f3","f2","f3","f3","f3","f2","f3","f3","f2","f2","f3","f3","f2","f2","f3","f2","f2","f2","f3","f3","f2","f3","f3","f2","f3","f2","f2","f3","f2","f3","f2","f3","f3","f2","f2","f2","f2","f3","f3","f2","f3","f3","f2","f2","f3","f3","f3","f2","f2","f3","f2","f3","f2","f3","f3","f3","f2","f2","f2","f2","f3","f3","f3","f3","f2","f2","f3","f3","f2","f2","f3","f3","f2","f2","f3","f2","f3","f2","f2","f3","f2","f3","f2","f2","f3","f2","f3","f2","f3","f3","f2","f2","f3","f3","f2","f2","f2","f3","f2","f3","f3","f3","f2","f2","f3","f3","f2","f2","f2","f3","f3","f2","f3","f3","f3","f2","f2","f2","f2","f2","f2","f2","f2","f2","f2")
transaction <- c(1,6,2,5,1,2,1,9,6,12,5,25,14,6,22,9,10,14,15,12,22,12,12,14,9,11,3,3,4,5,1,4,3,1,2,3,3,5,7,5,5,6,9,16,8,13,10,20,15,18,10,19,15,5,13,12,10,12,26,14,5,4,5,5,10,2,20,10,2,30,4,6,6,8,15,2,3,20,2,10,1,20,1,10,2,10,10,2,1,1,20,10,3,10,1,10,3,10,10,6,5,2,10,8,10,10,12,11,10,2,10,11,10,10,14,21,10,10,13,7,10,17,10,10,18,10,7,10,4,4,10,10,7,12,10,131,10,10,13,6,9,10,20,20,16,20,20,162,20,14,10,10,9,10,11,81,10,8,10,10,8,10,10,5,10,15,10,10,3,10,10,8,8,10,10,6,5,10,8,10,10,5,1,10,10,3)
mydata <- data.frame(datex, hourx, seller, product, detail, status, channel, transaction)
mydata %>% 
  group_by(datex, seller, product, detail, status, channel) %>%
  complete(hourx = seq(0, 23, 1)) %>%
  mutate(transaction = ifelse(is.na(transaction), 5, transaction)) -> mydata2
mydata2 <- data.frame(mydata2)

我的任务是使用t.test从我的数据中的任何组合中找出异常值。对于示例,我使用了两种组合。第一个组合:

  • 卖家=";dombsdpapp1";
  • 产品=&q;00021460
  • Detail=";E99;
  • Status=";FI04;
  • Channel=";f2";
# Looping 1
combination1 <- mydata2[(mydata2$seller == "dombsdpapp1" & mydata2$product == "00021460" & mydata2$detail == "E99" & mydata2$status == "FI04" & mydata2$channel == "f2"),]
mydata.test <- t.test(combination1$transaction)
mydata.conf <- mydata.test$conf.int[2]
mydata.index <- data.frame(indeks = 1:length(combination1$transaction), 
                           result = ifelse(combination1$transaction > mydata.conf, 1, NA))
mydata.index <- na.omit(mydata.index)[,1]
mydata.result1 <- combination1[c(mydata.index),]

mydata.result1
#datex      seller  product detail status channel hourx transaction
#56  2021-01-18 dombsdpapp1 00021460    E99   FI04      f2     7          14
#59  2021-01-18 dombsdpapp1 00021460    E99   FI04      f2    10          14
#60  2021-01-18 dombsdpapp1 00021460    E99   FI04      f2    11          12
#61  2021-01-18 dombsdpapp1 00021460    E99   FI04      f2    12          12
#200 2021-01-19 dombsdpapp1 00021460    E99   FI04      f2     7          11
#203 2021-01-19 dombsdpapp1 00021460    E99   FI04      f2    10          13
#204 2021-01-19 dombsdpapp1 00021460    E99   FI04      f2    11          16
#205 2021-01-19 dombsdpapp1 00021460    E99   FI04      f2    12          81

第二个组合:

  • 卖家=";dombsdpapp2";
  • 产品=&q;00021460
  • Detail=";E99;
  • Status=";FI04;
  • Channel=";f2";
# Looping 2
combination2 <- mydata2[(mydata2$seller == "dombsdpapp2" & mydata2$product == "00021460" & mydata2$detail == "E99" & mydata2$status == "FI04" & mydata2$channel == "f2"),]
mydata.test <- t.test(combination2$transaction)
mydata.conf <- mydata.test$conf.int[2]
mydata.index <- data.frame(indeks = 1:length(combination2$transaction), 
                           result = ifelse(combination2$transaction > mydata.conf, 1, NA))
mydata.index <- na.omit(mydata.index)[,1]
mydata.result2 <- combination2[c(mydata.index),]

mydata.result2
#datex      seller  product detail status channel hourx transaction
#127 2021-01-18 dombsdpapp2 00021460    E99   FI04      f2     6           9
#128 2021-01-18 dombsdpapp2 00021460    E99   FI04      f2     7           8
#129 2021-01-18 dombsdpapp2 00021460    E99   FI04      f2     8          13
#130 2021-01-18 dombsdpapp2 00021460    E99   FI04      f2     9          15
#131 2021-01-18 dombsdpapp2 00021460    E99   FI04      f2    10          18
#132 2021-01-18 dombsdpapp2 00021460    E99   FI04      f2    11          15
#134 2021-01-18 dombsdpapp2 00021460    E99   FI04      f2    13          12
#135 2021-01-18 dombsdpapp2 00021460    E99   FI04      f2    14          12
#136 2021-01-18 dombsdpapp2 00021460    E99   FI04      f2    15          14
#338 2021-01-19 dombsdpapp2 00021460    E99   FI04      f2     1           8
#344 2021-01-19 dombsdpapp2 00021460    E99   FI04      f2     7          13
#346 2021-01-19 dombsdpapp2 00021460    E99   FI04      f2     9          12
#348 2021-01-19 dombsdpapp2 00021460    E99   FI04      f2    11           9
#349 2021-01-19 dombsdpapp2 00021460    E99   FI04      f2    12           8

所有循环插入到一个表中,

# All Result
mydata.all.result <- rbind(mydata.result1, mydata.result2)
如何使用dplyr循环所有进程以获取所有结果?谢谢。

推荐答案

我们可以编写一个函数来删除异常值,然后将其应用于每个组。

library(dplyr)

remove_outliers <- function(transaction) {
  if(n_distinct(transaction) == 1) return(TRUE)
  mydata.test <- t.test(transaction)
  mydata.conf <- mydata.test$conf.int[2]
  transaction > mydata.conf
}

mydata2 %>%
  group_by(datex, seller, product, detail, status, channel) %>% 
  filter(remove_outliers(transaction)) %>%
  ungroup

这篇关于循环以使用dplyr在R中获得t.test结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆