当前 table 中的单词列表,分为四列

Present list of words in table, separate into four columns

我有一个包含 140 个单词的列表,我想在 table 中按字母顺序显示这些单词。我不希望它们显示为一个超长列表,而是在适当的地方分成几列(例如,也许四列?)我使用 flextable 但我不太确定如何做这个......

复制我拥有的数据类型和格式:

library(stopwords)
library(flextable)

word <- as_tibble(head(data_stopwords_smart$en, n=140))

然后我将其放入 table,但它给出了一个很长的列

wordtable <- flextable(word) %>%
  set_header_labels(rows = "") %>%
  autofit() 

一种方法是将词向量分成 N 个部分,并将每个部分设置为数据框中的一列。然后只需将列名设置为空,除了第一个。在下面的示例中,我手动完成了此操作,但如果您事先不知道向量的长度,则该过程应该相对容易自动化。

word <- head(data_stopwords_smart$en, n=140)
word <- data.frame(value1=word[1:35],
                   value2=word[36:70],
                   value3=word[71:105],
                   value4=word[106:140])

wordtable <- flextable(word) %>%
  set_header_labels(value1="Value",
                    value2=NA,
                    value3=NA,
                    value4=NA) %>%
  autofit() 

更新:

这是我创建的一个函数,可以自动执行该过程。你只需要给它一个向量和你想把它分成多少列。

flextable_ncol <- function(words, ncol){
  # Split into N chunks
  word.ls <- split(words, rep(seq_along(words), each=ceiling(length(words)/ncol))[1:length(words)])
  # put NAs into chuncks to make all chuncks equal length
  if (length(word.ls[[length(word.ls)]]) < length(word.ls[[1]])){
    word.ls[[length(word.ls)]] <- c(word.ls[[length(word.ls)]], 
                                    rep(NA, length(word.ls[[1]]) - length(word.ls[[length(word.ls)]])))
  }

  # make into a data frame
  word.df <- as.data.frame(do.call(cbind, word.ls))
  # Get column names
  col.names <- c('Value', rep(NA, ncol-1))
  names(col.names) <- names(word.df)
  # make table
  wordtable <- flextable(word.df)
  wordtable <- set_header_labels(wordtable, values=col.names)
  return(wordtable)
}

你可以这样使用它

word <- head(data_stopwords_smart$en, n=140)
flextable_ncol(word, 8)