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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:40:27