Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 根据组/类别进行多个配对t检验_R_T Test - Fatal编程技术网

R 根据组/类别进行多个配对t检验

R 根据组/类别进行多个配对t检验,r,t-test,R,T Test,我被困在Rstudio中对多个类别进行t.测试。我想得到每种产品类型的t检验结果,比较线上和线下的价格。我有超过800种产品类型,所以这就是为什么我不想为每个产品组手动执行此操作的原因 我有一个名为data的dataframe(超过200万行),看起来像: > Product_type Price_Online Price_Offline 1 A 48 37 2 B 29 22

我被困在Rstudio中对多个类别进行t.测试。我想得到每种产品类型的t检验结果,比较线上和线下的价格。我有超过800种产品类型,所以这就是为什么我不想为每个产品组手动执行此操作的原因

我有一个名为data的dataframe(超过200万行),看起来像:

> Product_type   Price_Online   Price_Offline   
1   A            48             37
2   B            29             22
3   B            32             40
4   A            38             36
5   C            32             27
6   C            31             35
7   C            28             24
8   A            47             42
9   C            40             36
理想情况下,我希望R将t.test的结果写入另一个称为product_types的数据帧:

    > Product_type   
    1   A           
    2   B            
    3   C          
    4   D          
    5   E         
    6   F            
    7   G            
    8   H            
    9   I            
   800 ...
变成:

> Product_type   t         df       p-value   interval    mean of difference            
    1   A           
    2   B            
    3   C          
    4   D          
    5   E         
    6   F            
    7   G            
    8   H            
    9   I            
   800 ...
如果我在不同的数据框中有所有产品类型,那么这就是公式:

t.test(Product_A$Price_Online, Product_A$Price_Offline, mu=0, alt="two.sided", paired = TRUE, conf.level = 0.99)
一定有更简单的方法。否则,我需要生成800+个数据帧,然后执行800次t测试

我试过使用列表和lapply,但到目前为止还不起作用。我还尝试在多个列上进行t检验:


然而,最后他仍然在手动插入男性和女性(对于我来说,超过800个类别)。

一种方法是使用
by

result <- by(data, data$Product_type, 
    function(x) t.test(x$Price_Online, x$Price_offline, mu=0, alt="two.sided", paired = TRUE, conf.level = 0.99))

result整洁的方法是使用dplyr和扫帚:

library(dplyr)
library(broom)

df <- data %>% 
  group_by(Product_type) %>% 
  do(tidy(t.test(.$Price_Online, 
                 .$Price_Offline, 
                 mu = 0, 
                 alt = "two.sided", 
                 paired = TRUE, 
                 conf.level = 0.99))))

非常感谢您的回复!非常有帮助,太好了!将要做:)再次感谢我们不需要helper函数,也可以只做
nest%%>%mutate(test\u results=map(data,~tidy(t.test(PriceOffline~PriceOnline,data=.x)))%%>%unest(test\u results)
df$Product_type <- names(result)
names(df) <- names(result$A)
library(dplyr)
library(broom)

df <- data %>% 
  group_by(Product_type) %>% 
  do(tidy(t.test(.$Price_Online, 
                 .$Price_Offline, 
                 mu = 0, 
                 alt = "two.sided", 
                 paired = TRUE, 
                 conf.level = 0.99))))
library(broom)
library(dplyr)
library(purrr)
library(tidyr)

t_test <- function(df, mu = 0, alt = "two.sided", paired = T, conf.level = .99) {
  tidy(t.test(df$Price_Offline, 
              df$Price_Online,
              mu = mu, 
              alt = alt,
              paired = paired,
              conf.level = conf.level))
}

d <- df %>%
  group_by(Product_type) %>%
  nest() %>%
  mutate(ttest = map(data, t_test)) %>%
  unnest(ttest, .drop = T)