重新编码Shiny中的变量

时间:2018-08-08 12:29:21

标签: r shiny mutate

我有一个关于在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

1 个答案:

答案 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的格式正确。