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

R语言:按变量组合统计行数并生成结构一致的新数据框

嘿,我完全get到你的需求了——就是要把原数据框里所有变量的唯一组合都提取出来,统计每个组合出现的次数,然后生成一个和原数据框结构匹配的新数据框,每个组合一行,还得带上对应的计数,对吧?下面我给你用两种常用的数据分析工具来实现,你可以按需选用:

在R中实现

最简洁的方式是用dplyr包的count()函数,它能直接按指定变量分组并统计行数:

# 先安装并加载dplyr包(如果没装过的话)
install.packages("dplyr")
library(dplyr)

# 假设你的原数据框名为df
new_df <- df %>%
  count(sample, deployment, density, replicate, shell.num, name = "count")

这样生成的new_df会包含所有变量的唯一组合,新增的count列就是对应组合的匹配行数,结构和原数据框完全一致。

如果不想用第三方包,也可以用基础R的table()函数实现:

# 先提取需要分组的列,生成频次表
count_table <- table(df[c("sample", "deployment", "density", "replicate", "shell.num")])
# 把频次表转换为数据框,指定计数列名
new_df <- as.data.frame(count_table, responseName = "count")

在Python中实现

用pandas包就能轻松搞定,这里提供两种常用方法:

方法1:使用value_counts()

import pandas as pd

# 假设原数据框名为df
# 统计指定变量组合的频次
count_series = df.value_counts(subset=["sample", "deployment", "density", "replicate", "shell.num"])
# 转换为数据框,重置索引并指定计数列名
new_df = count_series.reset_index(name="count")

方法2:使用groupby()+size()

这个方法和R的dplyr思路类似,先分组再统计:

import pandas as pd

new_df = df.groupby(["sample", "deployment", "density", "replicate", "shell.num"]) \
           .size() \
           .reset_index(name="count")

不管用哪种方法,最终的new_df都会完美满足你的需求——比如你提到的sample = A、deployment = A、density = L、replicate = 1、shell.num = 1这个组合,对应的count列会显示为2,且所有变量列的取值都和原数据框一致。

内容的提问来源于stack exchange,提问作者David.L

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:13:39