假设我有以下数据

workID <- c("A1", "A1", "B1", "C1", "C1", "C1", "D1", "A1")
Employee <- c(12, 22, 31, 90, 108, 17, 23, 56)
FY <- c(2019, 2019, 2019, 2020, 2020, 2020, 2021, 2021)
Office <- c("HQ", "HQ", "Tulsa", "Dallas", "Dallas", "Dallas", "Cleveland", "HQ")
Hours <- c(100, 200, 100, 150, 300, 275, 600, 700)

data <- data.frame(workID, Employee, FY, Office, Hours)

所以data个现在包含

workID Employee   FY    Office Hours
1     A1       12 2019        HQ   100
2     A1       22 2019        HQ   200
3     B1       31 2019     Tulsa   100
4     C1       90 2020    Dallas   150
5     C1      108 2020    Dallas   300
6     C1       17 2020    Dallas   275
7     D1       23 2021 Cleveland   600
8     A1       56 2021        HQ   700

在我的实际中,有很多列和260万行...

在我开始创建摘要统计数据之前,我首先想确定多年来使用相同WorkID的情况,因为这不应该发生. 它可以在同一年出现多次(workID上的每个员工都有自己的行),但是同一个workID不应该在不同的年份再次使用. 因此,在上述数据中,A1应该被标识为在2019年和2021年使用过.

我的目的是,我希望将每个工作ID的内容压缩到一行,并为使用该工作ID的员工数量和所花费的总时间列出新的列. 我的实际代码(上面的名字不匹配,但你明白了)看起来像

inspections <- consolidated %>% filter(Operation.Code.Desc %in% inspection)
num_inspections <- length(unique(inspections$Work.Accomplishment.ID))
#79,521

inspections2 <- consolidated %>% select(Operation.Date.FY,
                                               Work.Accomplishment.ID, 
                                               Program.Area.Abbrv,
                                               Operation.Code.Desc, 
                                               Total.Hours.Spent) %>%
  filter(Operation.Code.Desc %in% inspection) %>%
  group_by(Operation.Date.FY, Program.Area.Abbrv, Operation.Code.Desc) %>%
  summarise(personnel=n(), Total.Time = sum(Total.Hours.Spent),
            ops = n_distinct(Work.Accomplishment.ID))
sum(inspections2$ops)
#79,805  -- why not matching 79,521

正如你所看到的,有一个我无法解决的差异,我猜测在大型数据集中可能会有一些重复使用.抓住救命稻草 我的总工作时间与上面两个工作时间相符,但判断的次数却不相符.

抱歉,我不能在这里发布实际数据...它是巨大的和专有的.

推荐答案

简单

library(dplyr)

workID <- c("A1", "A1", "B1", "C1", "C1", "C1", "D1", "A1")
Employee <- c(12, 22, 31, 90, 108, 17, 23, 56)
FY <- c(2019, 2019, 2019, 2020, 2020, 2020, 2021, 2021)
Office <- c("HQ", "HQ", "Tulsa", "Dallas", "Dallas", "Dallas", "Cleveland", "HQ")
Hours <- c(100, 200, 100, 150, 300, 275, 600, 700)

data <- data.frame(workID, Employee, FY, Office, Hours)

data %>% 
  filter(n_distinct(FY) > 1, .by = workID)
#>   workID Employee   FY Office Hours
#> 1     A1       12 2019     HQ   100
#> 2     A1       22 2019     HQ   200
#> 3     A1       56 2021     HQ   700

创建于2024—04—05,reprex v2.1.0

R相关问答推荐

管道末端运行功能

为什么st_join(ob1,ob2,left = True)返回具有比ob1更多功能的sf对象?

从开始时间和结束时间导出时间

在使用ggroove后,将图例合并在gplot中

如何使用按钮切换轨迹?

删除列表中存储的数据帧内和数据帧之间的重复行

计算具有奇数日期的运行金额

如何从像glm这样的模型中提取系数表的相关性?

从外部文件读取多个值作为字符向量

如何从容器函数中提取conf并添加到ggplot2中?

防止在更新SHINY中的Reactive Value的部分内容时触发依赖事件

我是否可以使用多个变异项来构建顺序列(标记多个问题)

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

使用同一行中的前一个值填充R矩阵中的缺失值

如何在shiny 的应用程序 map 视图宣传单中可视化单点

组合名称具有模式的列表的元素

对一个数据帧中另一个数据帧中的值进行计数

将每晚的平均值与每晚的值进行比较,统计是否有效?

如何将一列相关性转换为R中的相关性矩阵

为什么在POSIXct-times的向量上循环会改变R中的类型?