Агрегирование с помощью dplyr - изменение одного столбца от факторного к числовому - PullRequest
0 голосов
/ 25 мая 2018

Привет и спасибо за чтение.

Я пытался агрегировать некоторые данные, и HAVE успешно смог сделать это с помощью функции агрегирования, но я также хотел попробовать сделать то же самое, запустив конвейер с помощью dplyr - однако я продолжаю получатьошибка:

Ошибка в mutate_impl (.data, dots): Ошибка оценки: не удалось найти функцию "15.2".

В настоящее время у меня есть этот набор данных p:

    sample    gene           ct
1    s001     gapdh         15.2
2    s001     gapdh           16
3    s001     gapdh         14.8
4    s002     gapdh         16.2
5    s002     gapdh           17
6    s002     gapdh         16.7
7    s003     gapdh Undetermined
8    s003     gapdh         14.6
9    s003     gapdh           15
10   s001      actb         24.5
11   s001      actb         24.2 
12   s001      actb         24.7
13   s002      actb           25
14   s002      actb         25.7
15   s002      actb         25.5
16   s003      actb         27.3
17   s003      actb         27.4
18   s003      actb Undetermined

и хотите, чтобы оно получило:

  p2$sample p2$gene  p2$ct.mean    p2$ct.sd
1      s001    actb 24.46666667  0.25166115
2      s002    actb 25.40000000  0.36055513
3      s003    actb 27.35000000  0.07071068
4      s001   gapdh 15.33333333  0.61101009
5      s002   gapdh 16.63333333  0.40414519
6      s003   gapdh 14.80000000  0.28284271

Код, который я сейчас использую, приводит к указанной выше ошибке:

library(dplyr)

p_ave_sd <- p %>% 
  filter(p$ct != "Undetermined") %>%
  mutate_at(as.character(p$ct), as.numeric, rm.na = TRUE) %>%
  group_by(p$gene) %>% 
  summarise(mean=mean(p$ct), sd=sd(p$ct))

Этоопределенно это был шаг "mutate", который сбил меня с толку, и я пробовал mutate_all (), mutate_if (is.factor, is.numeric) и тому подобное, но у каждого есть своя ошибка.

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Я не уверен, понял ли я ваш вопрос, но есть возможность:

p_ave_sd <- p %>% 
   filter(ct != "undetermined") %>%
   mutate(ct=as.numeric(ct)) %>%
   group_by(gene,sample) %>% 
   summarise(mean=mean(ct), sd=sd(ct))
0 голосов
/ 25 мая 2018

Вот способ использования mutate_at.Если у вас есть только один столбец для преобразования, mutate также будет работать и более просто.

library(dplyr)

dat2 <- dat %>%
  filter(!ct %in% "Undetermined") %>%
  # mutate(ct = as.numeric(ct)) %>% <<< This will also work
  mutate_at(vars(ct), funs(as.numeric(.))) %>%
  group_by(sample, gene) %>% 
  summarise(mean = mean(ct), sd = sd(ct)) %>%
  ungroup()

dat2
# # A tibble: 6 x 4
#   sample gene   mean     sd
#   <chr>  <chr> <dbl>  <dbl>
# 1 s001   actb   24.5 0.252 
# 2 s001   gapdh  15.3 0.611 
# 3 s002   actb   25.4 0.361 
# 4 s002   gapdh  16.6 0.404 
# 5 s003   actb   27.4 0.0707
# 6 s003   gapdh  14.8 0.283 

ДАННЫЕ

dat <- read.table(text = "    sample    gene           ct
1    s001     gapdh         15.2
                  2    s001     gapdh           16
                  3    s001     gapdh         14.8
                  4    s002     gapdh         16.2
                  5    s002     gapdh           17
                  6    s002     gapdh         16.7
                  7    s003     gapdh Undetermined
                  8    s003     gapdh         14.6
                  9    s003     gapdh           15
                  10   s001      actb         24.5
                  11   s001      actb         24.2 
                  12   s001      actb         24.7
                  13   s002      actb           25
                  14   s002      actb         25.7
                  15   s002      actb         25.5
                  16   s003      actb         27.3
                  17   s003      actb         27.4
                  18   s003      actb Undetermined",
                  header = TRUE, stringsAsFactors = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...