分类变量的汇总

时间:2019-01-02 00:38:00

标签: aggregation

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

student   class 
a          h        (being h the dominant level for the variable "class"

我正在与R studio合作

enter image description here

1 个答案:

答案 0 :(得分:0)

实际上,如果您希望创建一个新的数据框,以将多个学生汇总(或在dplyr中汇总)为每个学生的一行,其中指定的分类列将具有最常见的值,则可以使用Mode库中的DescTools函数,以及summarisedplyr中的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

现在让我们查看上面的两个基准:

i