中心在R数据帧中对齐行中不等长度的文本并填充侧翼位置

问题描述 投票:1回答:2

我可以居中对齐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,任何指示或包装等都会非常有帮助。

谢谢。

r dataframe tidyverse
2个回答
2
投票

我们用nchar得到字符数,找到那些('mx')的max,从字符数减去那个,除以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))))

-output in html

enter image description here


或者使用htmlTable

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

- 输出

enter image description here


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

© www.soinside.com 2019 - 2024. All rights reserved.