簡體   English   中英

重新編碼Shiny中的變量

[英]Recode Variable in Shiny

我有一個關於在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

我認為這就是您想要的。

 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的格式正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM