R语言如何高效生成按性别统计电影类型出现频次的列联表
R语言实现按性别统计电影类型观看次数的列联表
基础R实现(无需加载额外包,效率更高)
核心逻辑是对每个电影类型字段按性别分组求和,一行核心代码即可完成统计:
# 生成示例数据 mm <- matrix(0, 5, 6) df <- data.frame(apply(mm, c(1,2), function(x) sample(c(0,1),1))) colnames(df) <- c("Horror", "Thriller", "Comedy", "Romantic", "Sci.fi", "gender") # 核心统计代码 result <- t(sapply(df[, -ncol(df)], function(col) tapply(col, df$gender, sum))) # 调整列名(gender=0对应女性,gender=1对应男性) colnames(result) <- c("female", "male")
输出结果行名为电影类型,列为对应性别分组的观看计数,和需求格式完全匹配。
tidyverse实现(可读性更强,逻辑清晰)
如果习惯使用tidyverse生态,可以通过长表转换+分组统计的逻辑实现:
library(dplyr) library(tidyr) library(tibble) result <- df %>% # 把所有电影类型列转为长表格式 pivot_longer(cols = -gender, names_to = "movie_type") %>% # 仅保留观看过对应类型的记录(value=1) filter(value == 1) %>% # 按性别、电影类型分组计数 count(gender, movie_type) %>% # 转回宽表,无匹配记录的计数填充为0 pivot_wider(names_from = gender, values_from = n, values_fill = 0) %>% # 调整列名匹配需求 rename(female = `0`, male = `1`) %>% # 将电影类型设为行名 column_to_rownames("movie_type")
内容的提问来源于stack exchange,提问作者cliu
相关产品推荐
相关产品推荐

