在R数据框中的行中不等长的文本居中对齐,并填充侧翼位置

时间:2018-09-08 21:59:09

标签: r dataframe tidyverse

我可以居中对齐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 :(得分:2)

我们用nchar得到字符数,找到其中的max('mx'),从字符数中减去,除以2,如果字符数是比max短,然后两边带有复制的'X'(paste)的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

答案 1 :(得分:1)

您可以使用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