如何使用 excel (xlsx) 文件(R 语言)通过 dplyr 包正确实现汇总功能?
How to properly implement summarise function via dplyr package using an excel (xlsx) file (R language)?
我正在做一个工作项目,虽然我们目前使用 excel 来执行数据分析,但我正在尝试过渡到 R,我相信根据我过去的经验,这将证明更有用并且效率高运行。我附上了两张图片,一张显示了正在使用的原始数据,另一张显示了我想要通过 Excel 的枢轴 table 得到的最终结果。请注意,由于保密原因,我更改了名称。 编辑:我发现 Excel 中的结果与 summarize 函数的输出不具有相同的维度,我应该使用不同的函数吗?否则,我包含了第三张图片,可能更容易实现。 Raw Data Preferred result in Excel Second result
这是我到目前为止编写的代码(导入和创建数据框。变异等已经成功,所以我没有包含它,rd_data1 是导入的原始数据,没有更改):
rd_analysis2 <- rd_data1 %>%
select('Employee Name', 'Month', 'Customer Name', 'Service Type', 'Number of Points', 'Actual Time Spent(min)', 'Work Order') %>%
group_by('Employee Name', 'Month', 'Customer Name', 'Service Type') %>%
summarise(Total_Points = sum('Number of Points', na.rm=TRUE), Total_Time = sum('Actual Time Spent(min)'), distinct_work_orders = n_distinct('Work Order')) %>%
arrange('Employee Name', 'Month')
我要么收到带有摘要函数的错误消息“错误:summarise()
输入问题 Total_Points
。x 参数的 'type'(字符)无效”,要么得到奇怪的结果结合了所有的点和时间,但没有按照我的意愿分组。任何指示或提示将不胜感激,因为我有点生疏,所以如果我的语法不正确,请原谅我。
听起来您的数据类型可能不是数字。因此,错误消息的 invalid 'type' (character)
部分。
检查数据类型的一种方法(在 R 中有很多方法,this R-bloggers post 涵盖其他几个选项)是通过 summary
和 glimpse
.
将这些应用到内置的 starwars 数据集:
library(dplyr)
data(starwars)
summary(starwars)
name height mass hair_color skin_color
Length:87 Min. : 66.0 Min. : 15.00 Length:87 Length:87
Class :character 1st Qu.:167.0 1st Qu.: 55.60 Class :character Class :character
Mode :character Median :180.0 Median : 79.00 Mode :character Mode :character
Mean :174.4 Mean : 97.31
3rd Qu.:191.0 3rd Qu.: 84.50
Max. :264.0 Max. :1358.00
NA's :6 NA's :28
glimpse(starwars)
Observations: 87
Variables: 13
$ name <chr> "Luke Skywalker", "C-3PO", "R2-D2", "Darth Vader", "Leia Organa",...
$ height <int> 172, 167, 96, 202, 150,...
$ mass <dbl> 77.0, 75.0, 32.0, 136.0, 49.0,...
$ hair_color <chr> "blond", NA, NA, "none", "brown",...
$ skin_color <chr> "fair", "gold", "white, blue", "white",...
这显示了数据集中字符数据类型和数字数据类型之间的明显区别。如果你的数据集的一列应该是数字但已经存储为文本,那么你可以使用 as.numeric
来转换它。
例如对比以下结果
# make a column incorrectly character
starwars2 = starwars %>% mutate(mass = as.character(mass))
# view incorrect data
glimpse(starwars2)
# view corrected data
glimpse(starwars2 %>% mutate(mass = as.numeric(mass)))
我认为您只是对列名称使用了错误的引号。尝试改用反引号 (`)。
rd_analysis2 <- rd_data1 %>%
select(`Employee Name`, `Month`, `Customer Name`, `Service Type`, `Number of Points`, `Actual Time Spent(min)`, `Work Order`) %>%
group_by(`Employee Name`, `Month`, `Customer Name`, `Service Type`) %>%
summarise(
Total_Points = sum(`Number of Points`, na.rm=TRUE),
Total_Time = sum(`Actual Time Spent(min)`),
distinct_work_orders = n_distinct(`Work Order`),
.groups = 'drop'
) %>%
arrange(`Employee Name`, `Month`)
我正在做一个工作项目,虽然我们目前使用 excel 来执行数据分析,但我正在尝试过渡到 R,我相信根据我过去的经验,这将证明更有用并且效率高运行。我附上了两张图片,一张显示了正在使用的原始数据,另一张显示了我想要通过 Excel 的枢轴 table 得到的最终结果。请注意,由于保密原因,我更改了名称。 编辑:我发现 Excel 中的结果与 summarize 函数的输出不具有相同的维度,我应该使用不同的函数吗?否则,我包含了第三张图片,可能更容易实现。 Raw Data Preferred result in Excel Second result
这是我到目前为止编写的代码(导入和创建数据框。变异等已经成功,所以我没有包含它,rd_data1 是导入的原始数据,没有更改):
rd_analysis2 <- rd_data1 %>%
select('Employee Name', 'Month', 'Customer Name', 'Service Type', 'Number of Points', 'Actual Time Spent(min)', 'Work Order') %>%
group_by('Employee Name', 'Month', 'Customer Name', 'Service Type') %>%
summarise(Total_Points = sum('Number of Points', na.rm=TRUE), Total_Time = sum('Actual Time Spent(min)'), distinct_work_orders = n_distinct('Work Order')) %>%
arrange('Employee Name', 'Month')
我要么收到带有摘要函数的错误消息“错误:summarise()
输入问题 Total_Points
。x 参数的 'type'(字符)无效”,要么得到奇怪的结果结合了所有的点和时间,但没有按照我的意愿分组。任何指示或提示将不胜感激,因为我有点生疏,所以如果我的语法不正确,请原谅我。
听起来您的数据类型可能不是数字。因此,错误消息的 invalid 'type' (character)
部分。
检查数据类型的一种方法(在 R 中有很多方法,this R-bloggers post 涵盖其他几个选项)是通过 summary
和 glimpse
.
将这些应用到内置的 starwars 数据集:
library(dplyr)
data(starwars)
summary(starwars)
name height mass hair_color skin_color
Length:87 Min. : 66.0 Min. : 15.00 Length:87 Length:87
Class :character 1st Qu.:167.0 1st Qu.: 55.60 Class :character Class :character
Mode :character Median :180.0 Median : 79.00 Mode :character Mode :character
Mean :174.4 Mean : 97.31
3rd Qu.:191.0 3rd Qu.: 84.50
Max. :264.0 Max. :1358.00
NA's :6 NA's :28
glimpse(starwars)
Observations: 87
Variables: 13
$ name <chr> "Luke Skywalker", "C-3PO", "R2-D2", "Darth Vader", "Leia Organa",...
$ height <int> 172, 167, 96, 202, 150,...
$ mass <dbl> 77.0, 75.0, 32.0, 136.0, 49.0,...
$ hair_color <chr> "blond", NA, NA, "none", "brown",...
$ skin_color <chr> "fair", "gold", "white, blue", "white",...
这显示了数据集中字符数据类型和数字数据类型之间的明显区别。如果你的数据集的一列应该是数字但已经存储为文本,那么你可以使用 as.numeric
来转换它。
例如对比以下结果
# make a column incorrectly character
starwars2 = starwars %>% mutate(mass = as.character(mass))
# view incorrect data
glimpse(starwars2)
# view corrected data
glimpse(starwars2 %>% mutate(mass = as.numeric(mass)))
我认为您只是对列名称使用了错误的引号。尝试改用反引号 (`)。
rd_analysis2 <- rd_data1 %>%
select(`Employee Name`, `Month`, `Customer Name`, `Service Type`, `Number of Points`, `Actual Time Spent(min)`, `Work Order`) %>%
group_by(`Employee Name`, `Month`, `Customer Name`, `Service Type`) %>%
summarise(
Total_Points = sum(`Number of Points`, na.rm=TRUE),
Total_Time = sum(`Actual Time Spent(min)`),
distinct_work_orders = n_distinct(`Work Order`),
.groups = 'drop'
) %>%
arrange(`Employee Name`, `Month`)