Aggregation 分类变量的聚合

Aggregation 分类变量的聚合,aggregation,Aggregation,我想聚合我的数据库,包括分类变量,以便每一行代表原始数据中的多行,例如,基于学生ID。每一列需要在每个聚合ID的原始数据中保存最常见的值。 示例:我想按学生汇总数据,并查看分类变量的最常见级别-例如: student class a h (being h the dominant level for the variable "class" 我在R工作室工作 事实上,如果您希望创建一个新的数据框,在dplyr中将多个学生聚合或汇总到每个学生的一行中,其中指

我想聚合我的数据库,包括分类变量,以便每一行代表原始数据中的多行,例如,基于学生ID。每一列需要在每个聚合ID的原始数据中保存最常见的值。 示例:我想按学生汇总数据,并查看分类变量的最常见级别-例如:

student   class 
a          h        (being h the dominant level for the variable "class"
我在R工作室工作


事实上,如果您希望创建一个新的数据框,在dplyr中将多个学生聚合或汇总到每个学生的一行中,其中指定的分类列将包含最常见的值,则可以使用DESCTOLS库中的Mode函数,并使用dplyr进行汇总。您应该注意,您可能会遇到麻烦,就像在您的示例数据中一样,当您没有或有多个最常见的多模态值时。你需要决定做什么

这可以让您开始:

install.packages("dplyr")
library(dplyr)
install.packages("DescTools")
library(DescTools)

#create sample data tibble (similar to data frame)
data <- data.frame(student=c('a', 'a', 'a', 'b', 'c', 'c'),
               subject=c('aze','sdf','hjk','uio','okn','uhv'),
               class=c('h','h','f','l','h','l'),
               num=c(2,2,3,5,2,6))


# returns a single mode. Will return NA if multimodal by default.
# To return the first mode if multimodal, add "FALSE" to the second condition
get_mode = function(x, multimodal.na="TRUE"){
  modes <- Mode(x)
  if (multimodal.na=="FALSE" | length(modes)==1) {
    return(modes[1]) 
  } else {
    return(modes[length(modes)+1])
  }
}

# tests
data_mode <- data %>% group_by(student) %>% summarise(md_subject = get_mode(subject, multimodal.na = "FALSE"),
                                                      md_class = get_mode(class, multimodal.na = "FALSE"),
                                                      md_num = get_mode(num, multimodal.na = "FALSE"))
data_mode2 <- data %>% group_by(student) %>% summarise(md_subject = get_mode(subject),
                                                      md_class = get_mode(class),
                                                      md_num = get_mode(num))
现在让我们查看上面的两个基准:

> data_mode
# A tibble: 3 x 4
  student md_subject md_class md_num
  <fct>   <chr>      <chr>     <dbl>
1 a       aze        h             2
2 b       uio        l             5
3 c       okn        h             2
> data_mode2
# A tibble: 3 x 4
  student md_subject md_class md_num
  <fct>   <chr>      <chr>     <dbl>
1 a       NA         h             2
2 b       uio        l             5
3 c       NA         NA           NA

假设您的数据存储在数据框mydf:tablemydf\$student,mydf$class中,我认为这就是您所要求的。但你的问题仍然不完全清楚,你是在试图获得表格还是每个学生最普遍的课程。谢谢你的回答。实际上,我的目标是为每个独特的学生获得一个最流行的df!实际上,我的目标是为每个独特的学生获得一个最流行的df!有什么帮助吗?我建议在标签上加上“r”以增加牵引力;谢谢你,尤瓦尔!你救了我的计划@很高兴我能帮忙!如果你能接受和/或投票支持这个答案,我将不胜感激:我当然投票了,但我得到了这个:。。。声誉低于15的人所投的票将被记录,但不会改变公开显示的帖子分数。@F.Ha当然。我的意思是通过点击旁边的小V来接受答案,对不起: