удалить неиспользуемые значения факторов в ggvis Shiny

Я хочу исключить неиспользуемое значение фактора из x-axis на графике ggvis. У меня есть 2_

choices <- c("Value1", "Value2",
                "Value3", "Value4",
                "Value5", "Value6",
                "Value7", "Value8",
                "Value9", "Value10",
                "Value11", "Value12")

levele <- c("AT1","AT2","AT3","AT4","AT5","RT1","AT6","AT7","AT8","AT9","AT10","RT2")

number_value1 <- sample(1:100,22)
number_value2 <- sample(1:100,22)

df1 <- data.frame(product = c(rep("Product1",12),rep("Product2",10)), name = c(choices,choices[1:10]),
                  short_name = c(levele,levele[1:10]),number = number_value1, number2 = number_value2) 

и когда я хочу создать ggvis только с данными на основе Product2 я получаю

df1 %>%
  dplyr::filter(product == "Product2") %>%
  ggvis(x = ~short_name,y =  ~number) %>%
  layer_points(size := 120,fill = ~short_name)

введите здесь описание изображения

На графике также показаны неиспользованные значения факторов. Я не хочу этого видеть, поэтому я использовал x = ~factor(short_name), чтобы исключить эти неиспользуемые случаи.

df1 %>%
  dplyr::filter(product == "Product2") %>%
  ggvis(x = ~short_name,y =  ~number) %>%
  layer_points(size := 120,fill = ~short_name)

введите здесь описание изображения

================================================== ==================
Так что все в порядке. Проблема в том, что я хочу сделать то же самое в приложении Shiny, в котором есть возможность манипулировать осью. Есть 2 dataframes, в которых 2 Products с разным количеством name. Когда я меняю Product1 на Produt2 в разделе Select Product, в результате у меня есть все факторы по оси X, а также неиспользованные факторы. Мой код здесь. Если кто знает как это правильно реализовать?


person Nicolabo    schedule 25.03.2015    source источник
comment
droplevels обычно самый простой способ удалить неиспользуемые уровни фактора. Вы можете применить его ко всему data.frame. Вы можете попробовать: df1 %>% dplyr::filter(product == "Product2") %>% droplevels() %>% ...   -  person talat    schedule 25.03.2015


Ответы (2)


Как указал @docendo discimus, вы можете использовать droplevels. Я разветвил ваш код и внес изменения здесь

person jentjr    schedule 25.03.2015
comment
,docendo discimus Хорошо, но в результате, когда я манипулирую разделом Select, например. когда я выбираю Value1 Value2, Value3 и Value4, Value4 имеет красный цвет, но когда я нажимаю только V1 и V4, V4 имеет оранжевый цвет, как V2 ранее. Как сохранить цвет каждого Values? - person Nicolabo; 25.03.2015
comment
Я не верю, что это возможно в ggvis. Я попытался использовать scale_nominal("fill", c("AT1","AT2","AT3","AT4","AT5","RT1","AT6","AT7","AT8","AT9","AT10","RT2"), c("green","blue", "purple", "aliceblue", "yellow", "sienna", "navy", "orchid","maroon", "linen", "grey", "khaki")) для присвоения значений цвета переменным, но затем в легенде снова появляются неиспользуемые факторы. На github есть открытая проблема, связанная с этим github.com/rstudio/ggvis/issues/208 и связанный с этим вопрос здесь stackoverflow.com/questions/24810470/ - person jentjr; 26.03.2015

Это возможно. Нужно только создать новую реактивную переменную datasetInput() и изменить несколько строк кода. Вот мой код.

person Nicolabo    schedule 26.03.2015