如何使用 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 涵盖其他几个选项)是通过 summaryglimpse.

将这些应用到内置的 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`)