Свертывание нескольких символьных столбцов с ошибкой summarise_all выдает ошибку или включает NA - PullRequest
0 голосов
/ 15 мая 2018

У меня есть такой фрейм данных:

    structure(list(ref = c("1_S126_L006", "1_S126_L006", "1_S126_L006", 
"1_S126_L006", "1_S126_L006", "1_S126_L006", "1_S126_L006", "1_S126_L006", 
"1_S126_L006", "1_S126_L006", "1_S126_L006", "1_S126_L006", "150_S96_L005", 
"150_S96_L005", "150_S96_L005", "150_S96_L005", "150_S96_L005", 
"150_S96_L005", "150_S96_L005", "150_S96_L005"), Escherichia_coli_CyaA_1 = c(NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, "N142S", "G222S", NA, NA, 
NA, NA, NA, NA, NA, NA), Escherichia_coli_EF_Tu = c(".", ".", 
".", NA, NA, NA, NA, NA, NA, NA, NA, NA, ".", NA, NA, NA, NA, 
NA, NA, NA), Escherichia_coli_GlpT = c(NA, NA, NA, NA, NA, NA, 
NA, "E448K", NA, NA, NA, NA, NA, NA, NA, NA, NA, "E448K", NA, 
NA), Escherichia_coli_PtsI = c(NA, NA, NA, NA, NA, NA, NA, NA, 
"R367K", NA, NA, NA, NA, NA, NA, NA, NA, NA, "R367K", NA), Escherichia_coli_UhpT = c(NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_, 
NA_character_, NA_character_, NA_character_, NA_character_), 
    fabG = c(NA, NA, NA, NA, NA, "D105E", NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, "D105E", NA, NA, NA, NA), gyrA_8 = c(NA, 
    NA, NA, NA, NA, NA, NA, NA, NA, "S83L", NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, "S83L"), gyrB_1 = c(NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_), marR = c(NA, NA, NA, "G103S", 
    "Y137H", NA, NA, NA, NA, NA, NA, NA, NA, "G103S", "Y137H", 
    NA, NA, NA, NA, NA), nfsA = c(NA, NA, NA, NA, NA, NA, "Y45C", 
    NA, NA, NA, NA, NA, NA, NA, NA, NA, "Y45C", NA, NA, NA), 
    ompF = c(NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_
    ), parC_3 = c(NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_, NA_character_, NA_character_, NA_character_, 
    NA_character_)), .Names = c("ref", "Escherichia_coli_CyaA_1", 
"Escherichia_coli_EF_Tu", "Escherichia_coli_GlpT", "Escherichia_coli_PtsI", 
"Escherichia_coli_UhpT", "fabG", "gyrA_8", "gyrB_1", "marR", 
"nfsA", "ompF", "parC_3"), row.names = c(NA, -20L), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), vars = "ref", drop = TRUE, indices = list(
    0:11, 12:19), group_sizes = c(12L, 8L), biggest_group_size = 12L, labels = structure(list(
    ref = c("1_S126_L006", "150_S96_L005")), row.names = c(NA, 
-2L), class = "data.frame", vars = "ref", drop = TRUE, .Names = "ref"))

Что я хочу сделать, это свернуть весь фрейм данных, чтобы я получил только одну строку на запись в столбце "ref".Если в одном столбце присутствует несколько значений, они должны быть вставлены вместе и разделены символом «,» в одной и той же ячейке.Ранее я использовал следующее, чтобы свернуть весь фрейм данных в одну строку для каждой записи в столбце «ref»:

library(dplyr)

func_paste <- function(x) paste(unique(sum(x, na.rm = T)), collapse = ",")

df %>%
group_by(ref) %>%
summarise_all(funs(func_paste))

Это сработало на каком-то другом наборе данных, но я не могу на всю жизнь выяснитьпочему я до сих пор получаю сообщение об ошибке:

Error in summarise_impl(.data, dots) : 
Evaluation error: invalid 'type' (character) of argument.

Я уже прочитал несколько сообщений об этой ошибке, например, здесь и здесь , и они предложили попробовать group_by(x) %>% summarise_each(funs(sum)), но это работает только с числовыми данными, а не с символьными данными.Насколько я понял, это как-то связано с функцией sum (), так как это символьные данные.Любые предложения?

РЕДАКТИРОВАТЬ

Если я запускаю его без функции sum (), кажется, что все в порядке.Однако без части na.rm = T теперь вставляются все NA со значениями.Как мне заставить это игнорировать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...