gpt4 book ai didi

R:使用 dplyr 按组对前几年进行 t 检验

转载 作者:行者123 更新时间:2023-12-04 11:55:25 25 4
gpt4 key购买 nike

我有一个包含不同组、年份及其值的数据框,例如:

data <- data.frame(
group = c(rep('A', 120), rep('B', 120)),
year = rep(c(rep('2013-2014', 40), rep('2014-2015', 40), rep('2015-2016', 40)), 2),
value = rnorm(240)
)

对于每个组中的每一年,我想运行 t 检验以查看这些值是否与前几年有显着差异(我一直在使用函数 t.test(x, y, var.equal = TRUE) 来执行此操作一次性)

我想返回一个数据框以及 p 值,或者最好是使用 gtools::stars.pval() 生成的重要星星。所以要返回如下内容
group year      significance
A 2013-2014 NA
A 2014-2015 **
A 2015-2016 ***
B 2013-2014 NA
B 2014-2015
B 2015-2016

其中,上面“A”的 2014-2015 和 2013-2014 年差异的 p 值介于 0.001 和 0.01 之间,而 A 的 2015-2015 和 2014-2015 年差异的 p 值<0.001。没有证据表明 B 在任何年份有任何显着差异。

不能保证每个组的年数相同。

这样做的最好和最快的方法是什么?我希望我可以按组和年份使用 dplyr 和 group_by 来做到这一点?

最佳答案

另一种选择是汇总数据框,将一个单元格中的所有值存储为一个列表(是的,您可以这样做 - 数据框内部可以包含嵌套列表!)

使用 dplyr:

df=tbl_df(data)
df=arrange(df,group,year) %>% group_by(group,year) %>% summarise(values=list(value))
df=mutate(df,prev_values=lag(values))
df=group_by(df,group,year)
df=filter(df,!any(is.na(unlist(prev_values))))
df=mutate(df,p_value=t.test(unlist(values),unlist(prev_values),var.equal=TRUE)$p.value) %>% print

group year values prev_values p_value
1 A 2014-2015 <dbl[40]> <dbl[40]> 0.7894477
2 A 2015-2016 <dbl[40]> <dbl[40]> 0.2385581
3 B 2014-2015 <dbl[40]> <dbl[40]> 0.3084138
4 B 2015-2016 <dbl[40]> <dbl[40]> 0.2557849

关于R:使用 dplyr 按组对前几年进行 t 检验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32477863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com