我正在使用R闪亮的应用程序,因为我有两个下拉框.第一个下拉列表中填充了分类变量,第二个下拉列表中填充了数值变量.然后我在分类变量上应用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