基于 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
但不包含 B
或 C
:
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%
,这将在所有选定的列。
我在 checkboxGroupInput
语句中有一长串复选框。复选框的标签和值对应于数据框中 colnames
的子集。
例如,数据框称为 userdf
并且具有如下列:
A B C
1 1 0
如果 checkboxGroupInput
的名称是 sotags
那么我希望 input$sotags
修改数据框,如果它包含 A
但不包含 B
或 C
:
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%
,这将在所有选定的列。