分类变量的聚合
aggregation of categorical variables
我想聚合我的数据库,包括分类变量,以便每一行代表原始数据中的多行(例如,基于学生 ID)。每列都需要保存原始数据中最常见的值(每个聚合 ID)。
示例:我想按学生汇总我的数据并查看我的分类变量的最频繁级别 - 例如:
student class
a h (being h the dominant level for the variable "class"
我正在使用 R studio
如果您实际上希望创建一个新的数据框,将多个学生聚合(或汇总 dplyr
)到每个学生一行中,您指定的分类列将包含最常见的值,您可以使用 DescTools
库中的 Mode
函数,以及 summarise
和 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
我想聚合我的数据库,包括分类变量,以便每一行代表原始数据中的多行(例如,基于学生 ID)。每列都需要保存原始数据中最常见的值(每个聚合 ID)。 示例:我想按学生汇总我的数据并查看我的分类变量的最频繁级别 - 例如:
student class
a h (being h the dominant level for the variable "class"
我正在使用 R studio
如果您实际上希望创建一个新的数据框,将多个学生聚合(或汇总 dplyr
)到每个学生一行中,您指定的分类列将包含最常见的值,您可以使用 DescTools
库中的 Mode
函数,以及 summarise
和 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