Разделить столбец, сохраняя пустые значения между разделителем R - PullRequest
1 голос
/ 29 апреля 2020

Как можно разбить этот столбец (точки представляют дополнительные значения):

annotation

gene1|allele1|effect1|x1|...... 
gene2|||x2|......

на несколько разных столбцов:

gene    allele    effect     x    .     .     .
gene1   allele1   effect1    x1   .     .     . 
gene2   NA        NA         x2   .     .     .

Я пытался:

list<-strsplit(as.character(df$annotation), '|')

Проблема в том, что он возвращает список с разными размерами, потому что он не считает пустые места между двумя |. Итак, тогда, когда я делаю:

new_df<-as.data.frame(list)

Это дает мне эту ошибку:

Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,  : 
  arguments imply differing number of rows

Итак, как sprintf может преобразовать число пустых пробелов между разделителями как NA?

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Мы можем использовать cSplit

library(splitstackshape)
cSPlit(df, 'annotation', '|')
1 голос
/ 29 апреля 2020

Вы можете попробовать:

stringr::str_split(df$annotation, '|', fixed = TRUE, simplify = TRUE)

У вас также есть tstrsplit из data.table пакета:

library(data.table)
setDT(df)
df[, tstrsplit(annotation, "|", fixed = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...