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

面板调查数据:个人ID去重、数量统计与回归样本优化咨询

问题解决方案

1. 统计独立个体总数

R 实现

  • 基础R方法:length(unique(df$personal_ID))
  • dplyr 包简化方法:dplyr::n_distinct(df$personal_ID)

Python 实现

  • Pandas 方法:df['personal_ID'].nunique()
  • 基础方法:len(df['personal_ID'].unique())

2. 回归分析中确保个体仅纳入一次(基于5年区间观测值)

首先需明确个体观测值的选取规则,比如选择5年区间内的第一次/最后一次记录,或是对个体在区间内的重复变量取汇总值(均值、中位数等),以下是两种工具的实现示例:

R 实现(以dplyr为例)

假设数据有year列标记调查年份,先筛选目标5年区间数据,再按个人ID分组选取单条记录:

library(dplyr)

# 筛选2018-2022年的观测值
filtered_df <- df %>% filter(year >= 2018 & year <= 2022)

# 按个人ID分组,选取每个个体的第一条记录(可替换为last()取最后一条)
unique_ind_df <- filtered_df %>% group_by(personal_ID) %>% slice_head(n = 1)

# 基于去重后的数据集做回归
model <- lm(dependent_var ~ independent_vars, data = unique_ind_df)

若需对重复变量做汇总(比如取均值):

aggregated_df <- filtered_df %>% 
  group_by(personal_ID) %>% 
  summarise(
    dependent_var = mean(dependent_var, na.rm = TRUE),
    across(independent_vars, mean, na.rm = TRUE)
  )
model <- lm(dependent_var ~ ., data = aggregated_df)

Python 实现(以Pandas为例)

先筛选5年区间数据,再分组去重:

import pandas as pd

# 筛选2018-2022年的观测值
filtered_df = df[(df['year'] >= 2018) & (df['year'] <= 2022)]

# 按个人ID分组,取每个个体的第一条记录(keep='first',可换'last')
unique_ind_df = filtered_df.drop_duplicates(subset='personal_ID', keep='first')

# 回归分析(以statsmodels为例)
import statsmodels.api as sm
X = sm.add_constant(unique_ind_df[['independent_var1', 'independent_var2']])
y = unique_ind_df['dependent_var']
model = sm.OLS(y, X).fit()

若需汇总重复变量:

aggregated_df = filtered_df.groupby('personal_ID').agg(
    dependent_var=('dependent_var', 'mean'),
    independent_var1=('independent_var1', 'mean'),
    independent_var2=('independent_var2', 'mean')
).reset_index()

# 后续回归步骤同上

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:30:50