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

时间:2015-01-09 21:35:59

标签: r shiny

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

例如,数据框称为userdf,其列数如下:

A    B    C
1    1    0

如果checkboxGroupInput的名称是sotags,那么我希望input$sotags修改数据框,使其包含A但不包含B或{ {1}}:

C

我对此的蹩脚尝试是:

A    B    C
1    0    0

如果您想查看我的整个工作代码,请点击此处:https://github.com/hack-r/coursera_shiny

2 个答案:

答案 0 :(得分:1)

我认为这应该与您的代码产生相同的结果:

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

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

答案 1 :(得分:1)

让我们假设您从代码中的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是字符向量,则可以在==开头的行中将%in%替换为as.data.frame,并在所有选定的列中放置1。