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

在R中统计5个问卷项目的各排名频率方法问询

统计排名项目的位置频率

首先,我们先把你提供的示例数据构造成Pandas DataFrame:

import pandas as pd

# 构建你的示例数据框
data = {
    'rank1': ['A', 'A', 'C', 'B', 'A'],
    'rank2': ['B', 'C', 'A', 'A', 'B'],
    'rank3': ['C', 'B', 'B', 'C', 'D'],
    'rank4': ['D', 'D', 'E', 'D', 'C'],
    'rank5': ['E', 'E', 'D', 'E', 'E']
}
df = pd.DataFrame(data)

接下来,我们可以通过两种方式得到你想要的统计结果:

方法一:分步实现(清晰易懂)

这种方式适合新手理解每一步的逻辑:

  1. 先定义所有需要统计的项目列表,确保不会遗漏任何项目;
  2. 遍历每个排名列,统计每个项目在该列的出现次数,对未出现的项目补0;
  3. 合并所有列的统计结果,整理成目标格式。

代码如下:

# 定义所有待统计的项目
items = ['A', 'B', 'C', 'D', 'E']

# 逐个列统计频率,补全缺失项目为0
column_counts = []
for rank_col in df.columns:
    # 统计当前列的项目频率,用reindex补全所有项目,缺失的填0
    freq = df[rank_col].value_counts().reindex(items, fill_value=0)
    column_counts.append(freq)

# 合并统计结果并调整格式
result_df = pd.concat(column_counts, axis=1)
# 设置索引名为item,并将索引转为列
result_df.index.name = 'item'
result_df.reset_index(inplace=True)

# 输出结果
print(result_df)

方法二:简洁写法(一行式处理)

如果追求代码简洁,可以用apply函数一次性处理所有列:

items = ['A', 'B', 'C', 'D', 'E']
result_df = df.apply(lambda col: col.value_counts().reindex(items, fill_value=0)).T.reset_index()
result_df.columns = ['item'] + list(df.columns)

print(result_df)

两种方法运行后都会得到你需要的输出:

item  rank1  rank2  rank3  rank4  rank5
0    A      3      2      0      0      0
1    B      1      2      2      0      0
2    C      1      1      2      1      0
3    D      0      0      1      3      1
4    E      0      0      0      1      4

(注:你提供的示例输出中E的rank5为4,这和原始数据完全一致——5条记录里有4条的rank5是E,剩下1条是D,所以代码结果是准确的)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:45:22