我想在Shiny中使用textInput的一部分来创建一个变量,该变量将与数据帧(DF)中的值进行匹配,并基于该匹配值创建textOutput。说我有一个textInput,例如典型的输入ABC 123,ABC 234,ABC 345,BCD 123,BCD 234,BCD345。我还有一个DF,其中包含一列(Col1)和典型textInput的“第一”部分,即ABC,BCD和另一列有一组这样的对应值(Col2)的值
DF <-
Col1 Col2
1 ABC W
2 BCD Y
3 CDE X
4 DEF Z
我想使用textInput,说“ ABC 123”,仅选择它的“第一”部分(“ ABC”),然后使用此字符串在DF $ Col2中找到其对应的值,并在Shiny中创建textOutput进行填充/输出该值,在本例中为“ W”。同样,如果textInput(input $ UserInput)中的用户输入为CDE 345,我希望显示的输出值为“ X”。
我可以创建“第一个”部分的文本并输出到相关空间中,但是在使用它在DF中找到相应值并将其输出时,还有其他麻烦。
我正在使用它来隔离文本输入的“第一部分”,
output$first <- renderText({paste(substr(input$UserInput, 1,
nchar(input$UserInput)-4))})
这将输出“ ABC”,“ CDE”等字符串,但是我在将其用于DF $ Col2中的正确值并将其输出的第二步中遇到了问题。
答案 0 :(得分:1)
您可以将substr
调用包装到一个反应函数中。
mySelection <- reactive({
inputString <- paste(substr(input$UserInput, 1, nchar(input$UserInput)-4))
return(inputString)
})
现在inputString
的值将基于input$UserInput
的值而变化,并且可以在脚本中的任何位置调用(如mySelection()
)。
output$first <- renderText({mySelection()})
然后您可以使用DF[which(DF$col1 == mySelection()),]$col2