我已经从t检验和方差分析创建了许多输出表,我想将表的所有数字列四舍五入,而不是包含p值(p.value)的列。
当前代码:
library(dplyr)
library(broom)
a <- rnorm(100, 0.75, 0.1)
t.test <- t.test(a, mu = 0.5, alternative = "greater") %>%
broom::tidy() %>%
mutate_if(is.numeric, round, 2)
问题在于,它还会舍入我的p值,然后显示为0。我已经有一个报告我的markdown文件的p值的函数,所以我想知道如何保存p值(p .value)保持不变,但将所有其他数字列舍入为两位数吗?
谢谢
答案 0 :(得分:4)
如果您真的想对除p.value
列以外的所有数字列进行四舍五入,只需通过强制将p.value
列强制舍入为一个字符来确保它不会四舍五入四舍五入,然后四舍五入回到数字。
library(dplyr)
library(broom)
a <- rnorm(100, 0.75, 0.1)
t.test <- t.test(a, mu = 0.5, alternative = "greater") %>%
broom::tidy() %>%
mutate(p.value = as.character(p.value)) %>%
mutate_if(is.numeric, round, 2) %>%
mutate(p.value = as.numeric(p.value))
t.test
# A tibble: 1 x 8
estimate statistic p.value parameter conf.low conf.high method alternative
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
1 0.76 28.3 1.52e-49 99 0.74 Inf One Sample t-test greater
如果您只想舍入一些列,那么在@ user5249203升级时,最好使用mutate_at
。
答案 1 :(得分:1)
您可以执行简单的mutate_at
library(dplyr)
library(broom)
a <- rnorm(100, 0.75, 0.1)
t.test(a, mu = 0.5, alternative = "greater") %>%
broom::tidy() %>%
mutate_at(vars(- c(p.value,method,alternative)), round, 2)
#> # A tibble: 1 x 8
#> estimate statistic p.value parameter conf.low conf.high method
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
#> 1 0.75 27.1 5.89e-48 99 0.74 Inf One S~
#> # ... with 1 more variable: alternative <chr>
由reprex package(v0.2.1)于2019-04-18创建
答案 2 :(得分:0)
不是很好,不是dplyr,但我认为它应该可以完成工作:)
从t.test中选择所有数字而不是p.value的元素并将其四舍五入
t.test[(names(t.test)[which(!names(t.test) %in% c("p.value") & sapply(t.test, class) == "numeric")])] =
lapply(t.test[(names(t.test)[which(!names(t.test) %in% c("p.value") & sapply(t.test, class) == "numeric")])], round, 2)