[英]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.