如何在R语言中用Loop循环基于v2列生成统计新列
问题描述
现有数据集df如下:
id v1 v2 1 3 3,4,5,3,4,5 2 2 4,5,4 3 5 5,5,5 4 3 3,3,4 5 4 4,4,6,7
需要通过Loop循环生成新数据集:
- 新列名从
v3(对应v2中的最小值3)到v7(对应v2中的最大值7) - 每个新列的单元格值为对应数字在该行
v2中的出现次数 - 最终期望结果:
id v1 v3 v4 v5 v6 v7 1 3 2 2 2 0 0 2 2 0 2 1 0 0 3 5 0 0 3 0 0 4 3 2 1 0 0 0 5 4 0 2 0 1 1
解决方案(Python pandas 实现)
步骤1:预处理v2列
先把v2的字符串格式转为整数列表,方便后续统计:
import pandas as pd # 构造原始数据集 data = { 'id': [1,2,3,4,5], 'v1': [3,2,5,3,4], 'v2': ['3,4,5,3,4,5', '4,5,4', '5,5,5', '3,3,4', '4,4,6,7'] } df = pd.DataFrame(data) # 将v2列的字符串转为整数列表 df['v2_list'] = df['v2'].apply(lambda x: list(map(int, x.split(','))))
步骤2:确定Loop循环范围
提取v2中所有数字的最小和最大值,以此确定新列的起始与结束:
# 收集所有v2中的数字,计算极值 all_v2_nums = [] for lst in df['v2_list']: all_v2_nums.extend(lst) min_num = min(all_v2_nums) # 结果为3 max_num = max(all_v2_nums) # 结果为7
步骤3:Loop循环生成目标列
遍历从最小值到最大值的每个数字,统计每行的出现次数并生成对应列:
for num in range(min_num, max_num + 1): col_name = f'v{num}' # 统计每行v2列表中当前数字的出现次数,无匹配则为0 df[col_name] = df['v2_list'].apply(lambda x: x.count(num))
步骤4:整理最终数据集
删除临时列,调整列顺序得到目标结果:
# 保留需要的列并输出 final_df = df[['id', 'v1', 'v3', 'v4', 'v5', 'v6', 'v7']] print(final_df)
内容的提问来源于stack exchange,提问作者iGada
相关产品推荐
相关产品推荐

