R 根据组/类别进行多个配对t检验
我被困在Rstudio中对多个类别进行t.测试。我想得到每种产品类型的t检验结果,比较线上和线下的价格。我有超过800种产品类型,所以这就是为什么我不想为每个产品组手动执行此操作的原因 我有一个名为data的dataframe(超过200万行),看起来像: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
> 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)