基于 Shiny 中的 checkboxGroupInput 更新数据框中的二进制列值

Update binary column values in a dataframe based on checkboxGroupInput in Shiny

我在 checkboxGroupInput 语句中有一长串复选框。复选框的标签和值对应于数据框中 colnames 的子集。

例如,数据框称为 userdf 并且具有如下列:

A    B    C
1    1    0

如果 checkboxGroupInput 的名称是 sotags 那么我希望 input$sotags 修改数据框,如果它包含 A 但不包含 BC:

A    B    C
1    0    0

我对此的拙劣尝试是:

for(i in 1:colnames(userdf)){
   if(colnames(userdf[i]) %in% paste(input$sotags)){userdf[,i] <- 1}
   if(!colnames(userdf[i]) %in% paste(input$sotags)){userdf[,i] <- 0} 
}

如果你想查看我的全部工作代码,请看这里:https://github.com/hack-r/coursera_shiny

我认为这应该会给出与您的代码相同的结果:

userdf[,input$sotags] <- 1
userdf[,! colnames(userdf) %in% input$sotags] <- 0

但这将导致所有行都相等的数据框... 为什么需要它?

假设您在代码中以 userdf 开始,它不是反应式的,就像这样

userdf<-data.frame(A=NA,B=NA,C=NA)

input$sotags 是您的 checkboxGroupInput,它将是 character 和您的列名之一。

然后你可以像这样创建一个新的 data.frame:

    userdf2<-reactive({
             as.data.frame(matrix(as.numeric(colnames(userdf)==input$sotags),nrow=1,
                  dimnames=list(NULL,colnames(userdf)))
     })    

编辑添加:

如果 input$sotags 是字符向量,您可以在 as.data.frame 开始的行中将 == 替换为 %in%,这将在所有选定的列。