首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据中的聚合数据

数据中的聚合数据
EN

Stack Overflow用户
提问于 2015-10-30 02:33:00
回答 3查看 228关注 0票数 2

我在R中有以下数据帧

代码语言:javascript
复制
DeptNumber  EmployeeTypeId
         1              10
         1              11
         1              11
         2              23
         2              23
         2              30
         2              40
         3              45
         3              46

我需要生成另一个带有新列MaxEmployeeType的数据格式,该列应该包含对给定DeptNumber重复次数最多的EmployeeTypeId。输出应如下

代码语言:javascript
复制
DeptNumber  MaxEmployeeType 
         1              11
         2              23
         3              45

departmentNumber=3的情况下,有一个平分,但它可以提供任何一个选项。我不知道这样做的最佳方式是什么?任何帮助都是非常感谢的。

一个类似的问题已经发布了。

How to aggregate data in R with mode (most common) value for each row?

但它有一个限制,只使用plyr & lubridate。如果可能的话,我想要一个最好的解决方案,而不是局限于这两个包。这个问题甚至被否决,可能是因为它可能是家庭作业。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-30 03:02:39

你可以试试:

代码语言:javascript
复制
library(dplyr)
df %>% 
  count(DeptNumber, EmployeeTypeId) %>% 
  top_n(1) %>% 
  slice(1)

或者按照@jazzuro的建议:

代码语言:javascript
复制
count(df, DeptNumber, EmployeeTypeId) %>% slice(which(n == max(n))[1])

这意味着:

代码语言:javascript
复制
#Source: local data frame [3 x 3]
#Groups: DeptNumber [3]
#
#  DeptNumber EmployeeTypeId     n
#       (int)          (int) (int)
#1          1             11     2
#2          2             23     2
#3          3             45     1
票数 4
EN

Stack Overflow用户

发布于 2015-10-30 02:56:37

尝尝这个。

代码语言:javascript
复制
# Mode function
Mode <- function(x) {
   ux <- unique(x)
   ux[which.max(tabulate(match(x, ux)))]
}
# new data-frame
new_df <- data.frame("DeptNumber" = numeric(0), "MaxEmployeeType" = numeric(0))
# distinct departments
depts <- unique(df$DeptNumber)
# calculate mode for every department
for(dept in depts){
    dept_set <- subset(df, DeptNumber == dept)
    new_df <- rbind(new_df, c(dept, Mode(dept_set$EmployeeTypeId)))
}

R没有任何计算模式的标准函数。上述代码中的模式函数取自Ken的post here

票数 1
EN

Stack Overflow用户

发布于 2015-10-30 03:02:28

以下是另一种dplyr解决方案

代码语言:javascript
复制
library(dplyr)

data %>%
  count(DeptNumber, EmployeeTypeId) %>%
  slice(which.max(n))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33427770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档