我正在使用R Shiny应用程序,因为我有两个下拉框。首先在下拉列表中填充分类变量,然后在第二个下拉列表中填充数值变量。然后我在分类变量上应用groupby。
这是我的代码。
dataset<- dataUpload()
var1 <- as.character(input$variable1)
var2 <- as.character(input$variable2)
v$data <- dataset %>%
group_by(dataset[,var1]) %>%
summarize(Sum=sum(dataset[,var2])) %>%
arrange(desc(Sum))
它给了我以下输出。
Source: local data frame [7 x 2]
dataset[[var1]] Sum
(fctr) (int)
1 Chicken Biryani 37
2 Chicken Kabab 37
3 Chicken Kadai 37
4 Dal Makhani 37
5 Sai Bhaji and Pulav 37
6 Tava Pulav 37
7 Total Meal 37
这是dish_quantity变量的总和。但是我想要这样的东西。
dish_quant <- df_final %>%
group_by(dish_name) %>%
summarize(Dish_Quantity=sum(dish_quantity)) %>%
arrange(desc(Dish_Quantity))
dish_name Dish_Quantity
(fctr) (int)
1 Chicken Kadai 11
2 Chicken Biryani 9
3 Dal Makhani 6
4 Sai Bhaji and Pulav 3
5 Tava Pulav 3
6 Total Meal 3
7 Chicken Kabab 2
我在哪里做错了?我认为在Shiny中执行操作时,引用数据框的列名存在问题。
最佳答案
您正在遇到SE/NSE的问题。 dplyr
所做的事情有些不同,通常您用列名来调用它,然后对其进行一些处理。但是,当将其与字符变量一起使用时,这种魔术失败了,您需要依靠标准评估。
要解决此问题,您需要使用dplyr
动词的标准评估版(它们以_
结尾),并在函数调用上使用lazyeval。
这是使用内置的mtcars数据集修复的代码:
library(lazyeval) # so we can use interpret
library(dplyr)
var1 <- "cyl"
var2 <- "mpg"
mtcars %>%
group_by_(var1) %>% #note the _
summarize_(Sum = interp(~sum(x), x = as.name(var2))) %>% #note the _ and the interp call
arrange(desc(Sum))
Source: local data frame [3 x 2]
cyl Sum
(dbl) (dbl)
1 4 293.3
2 8 211.4
3 6 138.2
关于r - dplyr组由于不在Shiny工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34481864/