You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言:计算嵌套列表各元素值占比并存储为数据框

解决方案

首先定义你的嵌套列表:

lst <- list(
  c('A', 'A', 'A'), 
  c("A", "B"), 
  c("A", "A", "B", "B", "B", "B"), 
  c("A", "C", "C"), 
  c("B", "A")
)

步骤1:统一所有类型

先提取列表中出现的所有唯一类型,确保后续每个子列表的结果都覆盖这些类型:

all_types <- unique(unlist(lst))

步骤2:批量计算每个子列表的占比

遍历每个子列表,计算各类型的占比,补充缺失类型的占比为0,并指定保留的小数位数:

result_list <- lapply(lst, function(x) {
  # 计算当前子列表的频率表并转成占比
  prop <- prop.table(table(x))
  # 转成数据框并和全类型合并,缺失值补0
  df <- merge(data.frame(type = all_types), 
              as.data.frame(prop, stringsAsFactors = FALSE),
              by = "type", all.x = TRUE)
  df$Freq[is.na(df$Freq)] <- 0
  # 保留4位小数(可根据需求调整位数)
  round(df$Freq, 4)
})

步骤3:整理成目标数据框

把每个子列表的结果合并为列,设置列名为子列表序号:

final_df <- data.frame(
  type = all_types,
  do.call(cbind, result_list)
)
colnames(final_df)[-1] <- as.character(1:length(lst))

最终结果

运行后得到的final_df就是你需要的格式:

type     1     2     3     4     5
1    A 1.0000 0.5000 0.3333 0.3333 0.5000
2    B 0.0000 0.5000 0.6667 0.0000 0.5000
3    C 0.0000 0.0000 0.0000 0.6667 0.0000

如果需要调整小数位数,修改round函数的第二个参数即可(比如改为2就会得到0.33、0.67这样的结果)。

内容的提问来源于stack exchange,提问作者Stephan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:35:25