四舍五入所有数字列,但表中的一列

时间:2019-04-18 11:58:20

标签: r dplyr

我已经从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)保持不变,但将所有其他数字列舍入为两位数吗?

谢谢

3 个答案:

答案 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)