我有一个关于在Shiny中重新编码变量的问题。我尝试在下面的最小示例中解释我的问题。我有一个数据集。由于选择了“ selectInput”,我可以对数据进行子集设置。这很好。
data <- reactive(fileInput(inputId = "data", label = "Data Input“))
selectInput(inputId = "select", label = "Subset",
c("A" = "a",
"B" = "b"))
sub.dat <- reactive(
if (input$select == "a") {subset(data(), select c(v1:v21))}
else if (input$select == "b") {subset(data(), select = c(v22:v40))}
else {})
现在,我需要重新编码子集中的变量。我是这样尝试的:
sub.dat <- reactive(
if (input$select == "a")
{
df <- subset(data(), select = c(v1:v21))
for (i in 1:21) {
df[[paste0("v", i)]] <- recode(df[[paste0("v", i)]], "1"="0", "2"="1", "3"="2", "4"="3", "NA"="NA")
}
df
}
)
如何在一个反应式表达式中对与input $ select相关的子集进行重新编码?
但是它不起作用。有人知道如何管理吗?也许以优雅的方式进行变异?
非常感谢 derlu
答案 0 :(得分:0)
我认为这就是您要寻找的。
dat <- sample(1:4, 20, replace = T)
dat %>% recode(`2` = 1L, `4` = 3L)
[1] 3 3 1 1 3 3 3 3 3 3 1 3 3 1 1 3 1 3 1 1
dat
[1] 3 3 2 2 4 3 4 3 3 3 1 4 3 2 1 3 2 3 2 2
您可以将其与您的选择结合使用,以使其更加整洁:
df <- data() %>% filter(v:1 %in% input$select) %>% recode(`1` = 0L,`2` = 1L, `3` = 2L,`4` = 3L)
我没有执行该行,因此您可能需要调整过滤器。您将需要确定正确的观察值,并且input $ select的格式正确。