Я работаю над приложением Shiny и мне нужна помощь.
У меня есть датафрейм (загруженный из файла).Я хочу, чтобы пользователь мог извлекать строки, для которых определенное регулярное выражение появляется в определенном столбце этого фрейма данных.Позвольте мне перефразировать: я хочу, чтобы пользователь выбрал столбец из базы данных и поиска значений внутри этого конкретного столбца.
Позвольте мне показать вам пример.
Результат: функциявозвращает все строки, в которых столбец «нутриент» содержит «железо».
С фиксированным столбцом это просто: вы просто используете grepl
и извлекаете все строки, содержащие желаемое выражение.Но я не могу заставить его работать с определенной колонкой.Я посмотрел на бесчисленные вопросы и ответы, но ни один из них не принимает два ввода (скороговорка и столбец).
Это мой фрейм данных:
fileTable <- structure(list(
omg = c("tomato", "domestic cat", "zebrafish", "giraffe", "common cougar", "fawn", "daim", "wild cat", "domestic cat",
"muren", "jaguar", "green turtle", "dave grohl", "zebra", "tortoise", "dinosaur", "apex mellifera"),
nutrient = c("iron", "iron", "zing", "nitrate", "manganese", "nitrogen", "bromure", "iron", "calcium",
"calcium", "iron", "sodium", "metal", "nitrates", "sodium", "calcium", "sodium"),
data3 = c(0.03, 0.02, 0.02, 0.09, 0.05, 0.04, 0.08, 0.05, 0.02, 0.07, 0.02, 0.01, 0.09, 0.12, 0.16, 0.08, 0.15)),
row.names = c(NA, -17L),
class = "data.frame")
fileTable
#> omg nutrient data3
#> 1 tomato iron 0.03
#> 2 domestic cat iron 0.02
#> 3 zebrafish zing 0.02
#> 4 giraffe nitrate 0.09
#> 5 common cougar manganese 0.05
#> 6 fawn nitrogen 0.04
#> 7 daim bromure 0.08
#> 8 wild cat iron 0.05
#> 9 domestic cat calcium 0.02
#> 10 muren calcium 0.07
#> 11 jaguar iron 0.02
#> 12 green turtle sodium 0.01
#> 13 dave grohl metal 0.09
#> 14 zebra nitrates 0.12
#> 15 tortoise sodium 0.16
#> 16 dinosaur calcium 0.08
#> 17 apex mellifera sodium 0.15
Вот мой интерфейс:
#The user uses this input to select the column in which he wants to look
choices <- names(fileTable)
selectInput('column', 'From column:', choices , selected = choices[1])
#Here, he types the value he is looking for
filter <- textInput(inputId = "filter", label = "Filter" )
#And this button validates.
actionButton(inputId = "filterButton", label = "Filter")
А вот мой сервер:
observeEvent(input$filterButton , {
values <<- subset(theFile, grepl(input$filter, input$column, ignore.case = TRUE))
print(values)
})
Кажется, это не работает.Очевидно, grepl
не может найти столбец с именем input$column
в моем фрейме данных.Я заканчиваю этим:
OGM Nutrient data3
<0 rows> (or 0-length row.names)
Спасибо за вашу помощь.Я застрял на этом некоторое время.Если вы хотите, чтобы я перефразировал, не стесняйтесь (не на английском языке здесь).