Выровнять по центру текст неравной длины в строках в кадре R и заполнить фланкирующие позиции - PullRequest
0 голосов
/ 09 сентября 2018

Можно ли выровнять по центру текст всех строк указанного столбца R-кадра данных? Пример приведен ниже:

Gene.names = c("a", "b", "c", "d", "e")
Sequence = c("AAGVEAAAEVAATEIKMEEES", "ATMKDDLADYGGYDGGYVQDYEDFM", "ATNIEQIFRSF", "GILFCGRFSSP", "SLRASTSKSESSQK")
df = data.frame(Gene.names, Sequence)

Как видно, последовательности имеют разную длину. Мне нужно выровнять последовательности по центру, а затем добавить любую букву (например, X) с обеих сторон более коротких последовательностей, столько, сколько требуется, чтобы все последовательности имели одинаковую длину.

Возможно ли это даже в R? Я все еще изучаю R, и любые указания или пакеты и т. Д. Будут очень полезны.

Спасибо.

Ответы [ 2 ]

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

Вы можете использовать xtable для форматирования таблицы для просмотра без фактического изменения данных

library(xtable)
library(rstudioapi)

x = xtable(df, align = c('r','r','c'))

view_x <- function(x){
  tab <- paste(capture.output(print(x, type = 'html')), collapse = '\n')
  tf <- tempfile(fileext = ".html")
  writeLines(tab, tf)
  viewer(tf)
}

view_x(x)

enter image description here

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

Мы получаем число символов с nchar, находим max из них ('mx'), вычитаем это из количества символов, делим на 2, и если количество символов меньше, чем max, затем paste с обеих сторон с реплицированным 'X' (strrep)

nr <- nchar(df$Sequence)
mx <- max(nr)
i1 <- ceiling((mx -nr)/2)
out <- ifelse(i1 > 0, paste0(strrep("X", i1), df$Sequence, strrep("X", i1)),
              df$Sequence)
substr(out, 1, mx)

Если это для просмотра, другой вариант - DT::datatable

library(DT)    
datatable(df, options = list(columnDefs = list(list(className = 
                 'dt-center', targets = 2))))

- вывод в html

enter image description here


или используя htmlTable

library(htmlTable)
htmlTable(df, align = c("r", "c"))

-выход

enter image description here

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