我对R
的世界很新。我有以下测试数据:
A<-tibble(parasite=sample(0:1,10,rep=TRUE),L1=sample(0:1,10,rep=TRUE),
L2=sample(0:1,10,rep=TRUE),L3=sample(0:1,10,rep=TRUE),
L4=sample(0:1,10,rep=TRUE))
看起来像:
parasite L1 L2 L3 L4
1 0 0 1 0 0
2 1 0 1 1 1
3 1 1 1 0 1
4 0 1 1 1 0
5 1 1 1 1 0
...10 rows total
我想做的是运行4次chisq测试:
1.parasite vs L1
2.parasite vs L2
3.parasite vs L3
4.parasite vs L4
然后我想生成一个汇总tibble,它列出了每个表的Y分量(L1,L2 ......),chisq值和pvalues(在合理范围内舍入)。喜欢:
variable chisq pvalue
L1 1.475 0.0892
L2 18.453 0.0000E8
L3 2.4781 0.0012
L4 0.6785 0.2755
我已经看到使用map
来做类似的事情,但是我无法让它工作,但是因为我正在学习,所以任何简洁的方法都会非常感激。
e.g。
map(~chisq.test(.x, data$column)) %>%
tibble(names = names(.), data = .) %>%
mutate(stats = map(data, tidy))
unnest(data,stats)
有人能告诉我怎么做吗?
谢谢!
答案 0 :(得分:0)
将数据重塑为长(整齐)格式可能更好,然后您可以使用nest()
分组执行测试。例如
A %>%
gather("variable", "measure", -parasite) %>%
group_by(variable)%>%
nest(-variable) %>%
mutate(stats = map(data, ~broom::tidy(chisq.test(.$parasite, .$measure)))) %>%
select(-data) %>%
unnest()
替代方案,您可以使用do()
A %>%
gather("variable", "measure", -parasite) %>%
group_by(variable) %>%
do(broom::tidy(chisq.test(.$parasite, .$measure)))
答案 1 :(得分:0)
以下是一种方法:将数据转换为长形,在分组数据框上使用do
来调用chisq.test
,然后使用broom
整理该输出。
library(tidyverse)
set.seed(1)
A <-tibble(parasite=sample(0:1,10,rep=TRUE),
L1=sample(0:1,10,rep=TRUE),
L2=sample(0:1,10,rep=TRUE),
L3=sample(0:1,10,rep=TRUE),
L4=sample(0:1,10,rep=TRUE))
A %>%
gather(key = variable, value = value, -parasite) %>%
group_by(variable) %>%
do(chisq.test(.$parasite, .$value) %>% broom::tidy())
#> # A tibble: 4 x 5
#> # Groups: variable [4]
#> variable statistic p.value parameter method
#> <chr> <dbl> <dbl> <int> <chr>
#> 1 L1 0. 1 1 Pearson's Chi-squared test
#> 2 L2 2.93e-32 1.000 1 Pearson's Chi-squared test with Ya…
#> 3 L3 0. 1 1 Pearson's Chi-squared test
#> 4 L4 2.34e- 1 0.628 1 Pearson's Chi-squared test with Ya…
由reprex package(v0.2.0)创建于2018-05-11。