在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)
接下来,我们可以通过两种方式得到你想要的统计结果:
方法一:分步实现(清晰易懂)
这种方式适合新手理解每一步的逻辑:
- 先定义所有需要统计的项目列表,确保不会遗漏任何项目;
- 遍历每个排名列,统计每个项目在该列的出现次数,对未出现的项目补0;
- 合并所有列的统计结果,整理成目标格式。
代码如下:
# 定义所有待统计的项目 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
相关产品推荐
相关产品推荐

