Округление всех числовых столбцов, кроме одного в таблице - PullRequest
1 голос
/ 18 апреля 2019

Я создал множество выходных таблиц из t-тестов и ANOVA и хотел бы округлить все числовые столбцы таблиц, кроме столбца, содержащего 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. У меня уже есть функция для сообщения p-значений для моего файла уценкипоэтому мне интересно, как я могу сохранить p-значение (p.value) без изменений, округляя все остальные числовые столбцы до 2 цифр?

Спасибо

Ответы [ 3 ]

4 голосов
/ 18 апреля 2019

Если вы действительно хотите округлить все числовые столбцы, кроме столбца 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    

Если вы просто хотите округлить некоторые столбцы , тогда вам, вероятно, будет лучше использовать mutate_at, поскольку @ user5249203 продвигает.

1 голос
/ 18 апреля 2019

Вы можете сделать простой 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>

Создано в 2019-04-18 пакетом Представить (v0.2.1)

0 голосов
/ 18 апреля 2019

не очень красиво и не 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...