R блестящий: копирование ячеек из Excel в SelectizeInput

Я хочу, чтобы иметь возможность скопировать строки текста из Excel и вставить его в текстовое поле в нашем приложении следующим образом:

Выделите все ячейки и скопируйте в текстовое поле «Образцы меток»:

превосходить

Что мы хотим (каждая строка в Excel - это отдельная запись в текстовом поле)

Отдельные данные

Что приложение делает в настоящее время, когда мы вставляем строки из Excel (каждая строка из Excel объединяется в одну запись):

Объединенные данные

Есть ли способ скопировать ячейки в текстовое поле, похожее на SelectizeInput, и каким-то образом отделить каждую ячейку при копировании из Excel? Спасибо.


Редактировать 1

Исключения:

1) Когда строки имеют одинаковые значения:

введите описание изображения здесь

показывает только одну строку, но для этого нужны 4 "женские" метки (если это возможно)

введите описание изображения здесь

2) Ячейки имеют значения с пробелом:

введите описание изображения здесь

каждая метка разделена пробелом, а повторяющиеся слова, такие как DAY, отображаются только один раз:

введите описание изображения здесь

В идеале это то, что нужно:

введите описание изображения здесь


Редактировать 2

Когда разделитель установлен на / n, все объединяется в одну метку, а не в отдельные метки

введите описание изображения здесь

Всего 1 ответ


Вот минимальный пример, который работает для меня.

library(shiny)

ui <- fluidPage(
  selectizeInput(
    "foo", 
    label = "inputs",
    choices = "", 
    multiple = T,
    options = list(delimiter = " ", create = T)
    ),
  textOutput("results")
)

server <- function(input, output, session) {
  output$results <- renderText(
    paste(paste("item", input$foo), collapse = " || ")
  )
}

shinyApp(ui, server)

Если вы отключите опцию delimiter = " " , поведение вернется к нежелательному значению по умолчанию. При копировании из Excel элементы объединяются с пробелами, где selectize.js ожидает запятые.

https://shiny.rstudio.com/articles/selectize.html

https://github.com/selectize/selectize.js/blob/master/docs/usage.md


Почему я думаю, что это неправильный подход:

library(shiny)

ui <- fluidPage(
  selectizeInput(
    "foo", 
    label = "inputs",
    choices = "", 
    multiple = T,
    options = list(
      delimiter = " ", 
      create = T
      )
  ),
  textOutput("results"),

  hr(),

  "textInput",
  textInput("pasted1", "paste text here"), 

  h5("Raw hex code points (20 is space, 0a is linefeed"),
  textOutput("verb1"), 
  h5("Vector of results from splitting on '\n'"),
  textOutput("split1"),

  hr(),

  "textAreaInput",
  textAreaInput("pasted2", "paste text here"), 

  h5("Raw hex code points (20 is space, 0a is linefeed"),
  textOutput("verb2"), 
  h5("Vector of results from splitting on '\n'"),
  textOutput("split2")
)

server <- function(input, output, session) {
  output$results <- renderText(
    paste(paste("item", input$foo))
  )

  output$verb1 <- renderPrint(charToRaw(input$pasted1))

  output$split1 <- renderText(
    paste(strsplit(input$pasted1, "
"))
    )

  output$verb2 <- renderPrint(charToRaw(input$pasted2))

  output$split2 <- renderText(
    paste(strsplit(input$pasted2, "
"))
  )
}

shinyApp(ui, server)

Я думаю, что selectizeInput , как и textInput , очищает все пробелы, включая переводы строк, в одиночные пробелы. Если вы используете textAreaInput качестве контейнера, он будет копировать вставленный текст дословно, и вы можете выполнить разбиение на новые строки самостоятельно, а затем использовать этот вектор, где бы вы ни собирались использовать варианты, возвращаемые selectizeInput .

введите описание изображения здесь


Есть идеи?

10000