R语言如何统计嵌套dataframe中各资源项的出现次数
R嵌套dataframe资源项频次统计方案
场景说明
使用R开展数据处理时,常遇到嵌套式dataframe结构:外层dataframe的内部元素本身也是独立dataframe,属于多维度数据结构,且每个子dataframe包含的条目数量不固定,无法直接用常规计数函数统计。
需求目标
统计数据中各资源项的总出现频次,例如Xbox One, NM2、PS4, NM2这类格式的资源条目出现次数。
实现方法
方法1:tidyverse方案(代码简洁易读,适合R基础薄弱用户)
如果未安装tidyverse套件,先运行安装命令:
install.packages("tidyverse")
核心处理代码:
library(tidyverse) # 替换nested_df为你实际存储嵌套数据的对象名 count_result <- nested_df %>% # 展开嵌套的子dataframe,拉平为普通二维表结构 # 如果只有某一列是存子dataframe的列表列,把everything()替换为对应列名即可 unnest(cols = everything()) %>% # 如果资源项是由两个字段拼接而成(比如平台+版本),替换成你实际的列名 # 如果资源项本身是单独字段,跳过这步unite逻辑即可 unite("resource_name", platform_col, version_col, sep = ", ", remove = F) %>% # 分组计数,结果按频次从高到低排序 count(resource_name, name = "freq", sort = T)
运行后count_result就是各资源项的频次统计结果,直接查看即可。
方法2:Base R原生方案(无需安装第三方包)
不需要依赖外部包,用R自带函数即可完成处理:
# 把所有子dataframe按行合并为一个完整的普通dataframe flat_data <- do.call(rbind, nested_df) # 情况1:资源项已经是单独存在的字段,直接计数 count_result <- as.data.frame(table(flat_data$resource_col), stringsAsFactors = F) colnames(count_result) <- c("resource_name", "freq") # 情况2:资源项需要由两个字段拼接生成,先运行下面的拼接代码再计数 flat_data$resource_name <- paste(flat_data$platform_col, flat_data$version_col, sep = ", ") count_result <- as.data.frame(table(flat_data$resource_name), stringsAsFactors = F) colnames(count_result) <- c("resource_name", "freq") # 结果按频次降序排列 count_result <- count_result[order(-count_result$freq), ]
注意事项
- 代码中带
_col后缀的占位符,需要替换为你自己数据里实际的列名再运行 - 如果嵌套层级超过2层,多运行一次
unnest(tidyverse方案)或者多做一次rbind合并(base R方案)即可拉平数据
内容的提问来源于stack exchange,提问作者Eric Dodson
相关产品推荐
相关产品推荐

