Ошибка с summaze (): невозможно преобразовать группу 1 в числовой - PullRequest
0 голосов
/ 09 октября 2018

У меня есть следующие данные:

structure(list(qnrA1 = c("0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0"), qnrB19 = c("0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0"), qnrB6 = c("0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0"), qnrB60 = c("0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0"), qnrS1 = c("0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0"), qnrS2 = c("0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0"), qnrS4 = c("0", "0", "0", "0", "0", "0", "0", "0", 
"0", "0"), gyrA = c("S83L", "S83L", "S83L", "S83L", "S83L", "S83L, D87N", 
"S83L", "S83L", "S83A", "S83L, D87N"), gyrB = c("0", "0", "0", 
"0", "0", "0", "0", "0", "0", "0"), parC = c("0", "S80I", "0", 
"0", "0", "S80I", "0", "0", "0", "S58I"), parE = c("0", "0", 
"0", "0", "0", "0", "0", "D475E", "0", "0"), marR = c("1", "1", 
"0", "1", "1", "1", "0", "1", "1", "0"), CIP = c(0.25, 1, 0.5, 
0.25, 0.25, 8, 0.12, 0.25, 0.06, 16), NAL = c(128L, 256L, 256L, 
256L, 64L, 256L, 64L, 128L, 32L, 256L)), row.names = c(NA, -10L
), class = c("tbl_df", "tbl", "data.frame"))

Что я хочу сделать, это сгруппировать все столбцы, кроме столбцов CIP / NAL, затем выполнить эквивалент count (), но я хочу создатьновые столбцы со значениями, найденными в CIP / NAL для каждой группы.Если максимальное значение в CIP равно значению NAL, я просто хочу это значение в столбце.Если они не равны, я хочу, чтобы они оба были в одной строке и столбце, разделенных знаком «-».Я пробовал следующее:

library(dplyr)
df %>%
  group_by_at(vars(-c(CIP, NAL))) %>%
  summarise(CIP = ifelse(min(as.numeric(CIP)) == max(as.numeric(CIP)),
                         median(as.numeric(CIP)),
                         paste(min(as.numeric(CIP)), max(as.numeric(CIP)), sep = "-")),
            n = n())

Однако, когда я запускаю это, я получаю следующую ошибку:

Error in summarise_impl(.data, dots) : 
  Column `CIP` can't promote group 1 to numeric

Похоже, что ошибка возникает, когда мин (как .numeric (CIP)) = / = max (as.numeric (CIP)) для каждой группы, так как, кажется, все работает нормально, когда я меняю строку вставки на «0» в функции ifelse.Любые предложения относительно того, что означает эта ошибка?

1 Ответ

0 голосов
/ 09 октября 2018

Я не знаком с ошибкой, но если вы посмотрите на оператор ifelse, вы получите числовое значение, если условие истинно, и символ, если оно ложно.Я думаю, что это приводит к ошибке.Вы можете попробовать это:

df %>%
  group_by_at(vars(-c(CIP, NAL))) %>%
  summarise(CIP = ifelse(min(as.numeric(CIP)) == max(as.numeric(CIP)),
                         as.character(median(as.numeric(CIP))),
                         paste(min(as.numeric(CIP)), max(as.numeric(CIP)), sep = "-")),
            n = n())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...