使用R语言按Eco_Status分组ID并生成对应数据框与向量
解决方案
需求1:生成以poor/average/rich/billionaire为列的分组数据框
Python 实现
使用pandas的透视功能实现,先统一类别顺序再展开:
import pandas as pd # 强制指定Eco_Status的类别及顺序,避免遗漏或顺序混乱 df['Eco_Status'] = pd.Categorical(df['Eco_Status'], categories=['poor', 'average', 'rich', 'billionaire']) # 为每个分组内的ID添加序号,用于透视时对齐行 df['group_seq'] = df.groupby('Eco_Status').cumcount() # 透视生成目标数据框 target_df = df.pivot(index='group_seq', columns='Eco_Status', values='ID').reset_index(drop=True) # 重命名列(可选,确保列名完全匹配需求) target_df.columns = ['poor', 'average', 'rich', 'billionaire']
R 实现
借助tidyverse工具链的分组和透视函数:
library(tidyverse) # 定义Eco_Status的因子顺序 df$Eco_Status <- factor(df$Eco_Status, levels = c("poor", "average", "rich", "billionaire")) # 添加分组内序号并透视 target_df <- df %>% group_by(Eco_Status) %>% mutate(group_seq = row_number()) %>% ungroup() %>% pivot_wider(names_from = Eco_Status, values_from = ID) %>% select(-group_seq)
需求2:提取四类Eco_Status对应的ID向量
Python 实现
可以批量生成字典存储,或单独提取每个类别的ID列表:
# 批量生成字典,键为状态名,值为对应ID列表 id_dict = {status: df[df['Eco_Status'] == status]['ID'].tolist() for status in ['poor', 'average', 'rich', 'billionaire']} # 单独提取每个向量(按需使用) poor_ids = df[df['Eco_Status'] == 'poor']['ID'].tolist() average_ids = df[df['Eco_Status'] == 'average']['ID'].tolist() rich_ids = df[df['Eco_Status'] == 'rich']['ID'].tolist() billionaire_ids = df[df['Eco_Status'] == 'billionaire']['ID'].tolist()
R 实现
使用split快速分组,或通过布尔索引单独提取:
# 一键生成包含所有ID向量的列表 id_list <- split(df$ID, df$Eco_Status) # 单独提取每个向量(按需使用) poor_ids <- df$ID[df$Eco_Status == "poor"] average_ids <- df$ID[df$Eco_Status == "average"] rich_ids <- df$ID[df$Eco_Status == "rich"] billionaire_ids <- df$ID[df$Eco_Status == "billionaire"]
内容的提问来源于stack exchange,提问作者Daniel James
相关产品推荐
相关产品推荐

