Несколько гиперссылок в данной ячейке гибкой таблицы - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть фрейм данных

df = data.frame("A" = c("a","b, c","c","d, e, f"), "B" = c(1,2,3,4), "link" = c("www.a.com", "www.b.com, www.c.com", "www.c.com", "www.d.com, www.e.com, www.f.com"))

A B ссылка

a 1 www.a.com

b, c 2 www.b.com, www.c.com

c 3 www.c.com

d, e, f 4 www.d.com, www.e.com, www.f.com

Я делаю таблицу форматов

dt.ft <- regulartable(data = dt[, list(A, B, link)])

Я хочу, чтобы значения в столбце «А» были связаны с соответствующими значениями в столбце «ссылка», что я и сделал с помощью @DavidGohel, используя следующую команду

dt.ft <- flextable(data = df, col_keys = c("A", "B"))
dt.ft <- compose(x = dt.ft, j = 1, value = as_paragraph( hyperlink_text(x = A, url = link)))
* * Д тысячу двадцать-один

Это отлично работает. Но, как вы можете видеть, в столбце «А» есть разделенные запятыми значения, а в столбце «ссылки» - разделенные запятыми. Как я могу сделать гиперссылку и показывать в той же ячейке Таким образом, гибкая таблица будет иметь столбец «A», а вторая строка будет иметь гиперссылки «b» и «c» на «www.b.com» и «www.c.com»

Если есть другая альтернатива для разработки DF, я могу это сделать. Просто у меня динамический контент и он будет отличаться от разных значений, т.е. я бы не знал количество ссылок ранее

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Для неправильной структуры, подобной этой, вам нужна специальная функция.

library(flextable)

df = data.frame("A" = c("a","b, c","c","d, e, f"), 
                "B" = c(1,2,3,4), 
                "link" = c("http://www.a.com", "http://www.b.com, http://www.c.com", 
                           "http://www.c.com", "http://www.d.com, http://www.e.com, http://www.f.com"),
                stringsAsFactors = FALSE)

ft <- flextable(data = df, col_keys = c("A", "B"))

multi_hyperlink_text <- function(labels, links){

  out <- mapply(
    function(text, url){
      dat <- hyperlink_text(text, url = url)
      dat <- split(dat, seq_along(text))
      as_paragraph(list_values = dat)
      }, 
    text = strsplit(labels, split = ","),
    url = strsplit(links, split = ","), SIMPLIFY = FALSE, USE.NAMES = FALSE
  )

  # the following is necessary to comply with expected 
  # flextable structure !
  Reduce(append, out)
}

ft <- compose(x = ft, j = 2, value = multi_hyperlink_text(A, link))
ft <- color(x = ft, j = 2, color = "#0077CC")
ft <- add_footer_lines(x = ft, "column B is made of links")
ft

enter image description here

0 голосов
/ 20 июня 2019

На данный момент это невозможно. Обходным путем будет создание нескольких строк с одинаковым содержимым, за исключением ссылки и значения ссылки, а затем объединение этих строк. таким образом у вас будет несколько гиперссылок в вертикальном порядке для объединенной строки.

...