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

R语言分类变量重编码及多州组间统计对比实现问题咨询

问题1:分类变量重编码实现

直接通过numpy.where或者pandas.map都可以快速完成重编码,生成新列:

方法1:np.where实现(规则简单时推荐)

import numpy as np
# 判定逻辑:回答为No时赋值0,其余(Yes/Maybe)赋值1
df['喜欢蓝色标识'] = np.where(df['你是否喜欢蓝色?'] == 'No', 0, 1)

方法2:map映射实现(规则复杂时扩展性更好)

# 定义映射规则
encode_map = {'Yes':1, 'Maybe':1, 'No':0}
df['喜欢蓝色标识'] = df['你是否喜欢蓝色?'].map(encode_map).astype(int)
# 若存在不在规则内的异常值,可新增fillna处理:.fillna(0, downcast='infer')
问题2:多州组间统计高效实现

不需要拆分数据集,直接用pandas.groupby聚合即可完成全量州的统计,15个州的计算量几乎无性能损耗:

步骤1:一键统计所有州的No回答占比

你的样例数据中已经预生成了No的0-1标识列,直接分组求均值即为对应占比:

# 输出结果为所有州对应的No回答占比表
state_no_stats = df.groupby('州', as_index=False)['No'].agg(
    总样本数='count',
    No回答占比='mean'
)

如果没有预生成的No列,直接从原回答列统计即可:

state_no_stats = df.groupby('州', as_index=False)['你是否喜欢蓝色?'].agg(
    总样本数='count',
    No回答占比=lambda x: (x == 'No').mean()
)

步骤2:特定州对比

如果需要单独对比加利福尼亚州和亚利桑那州,直接过滤统计结果即可:

compare_res = state_no_stats[state_no_stats['州'].isin(['加利福尼亚', '亚利桑那'])]

可选:组间差异显著性检验

如果需要验证不同州的回答分布是否存在统计显著差异,可直接生成交叉表做卡方检验:

from scipy.stats import chi2_contingency
# 生成州-回答的交叉频数表
cross_table = pd.crosstab(df['州'], df['你是否喜欢蓝色?'])
chi2_val, p_val,自由度,预期频数 = chi2_contingency(cross_table)
# p_val < 0.05即可认为不同州的回答分布存在显著差异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:24:00