【发布时间】:2020-12-05 02:11:19
【问题描述】:
我有一个家庭数据集data,每个家庭都由变量id 标识,每个人都由id + num 标识(家庭ID + 家庭成员)。对于每个人,我都有不同的人口统计特征,例如:
id num age wage edu marital_status
1 1 33 1200 Secondary Married/Cohabitating
1 2 35 1100 College Married/Cohabitating
1 3 12 -1 Not applicable Not applicable
2 1 27 1600 College Single
3 1 59 2000 Secondary Married/Cohabitating
3 2 51 1800 Other Married/Cohabitating
我创建了一组变量来记录另一个家庭成员的特征。
因此,例如,我想为有两个已婚或同居成年人的家庭提供“伴侣工资”wage_p 的变量,这是我与
sums = tapply(data$wage, data$id, sum)
data$wage_tot = sums[match(data$id,names(sums))]
data$wage_tot[!(data$id %in% data$id[duplicated(data$id)])] = NA
data$wage_p = data$wage_tot - data$wage
基本上,我将每个家庭的wage相加得到wage_tot,然后减去wage得到wage_p.
这很有效,因为我首先将数据集限制为已婚或同居的人(所以我每个家庭有 1 或 2 个人)。 (我知道这可能比必要的更复杂)。
我的结果:
id num age wage edu marital_status wage_tot wage_p
1 1 33 1200 Secondary Married/Cohabitating 2300 1100
1 2 35 1100 College Married/Cohabitating 2300 1200
2 1 27 1600 College Single NA NA
3 1 59 2000 Secondary Married/Cohabitating 3800 1800
3 2 51 1800 Other Married/Cohabitating 3800 2000
现在,当我想对分类变量执行此操作时,问题就来了,因为我无法像对连续变量那样得到总数然后减去。
所以举个例子,如果我想创建一个变量来记录配偶的教育水平,edu_p。
id num age wage edu marital_status edu_p
1 1 33 1200 Secondary Married/Cohabitating College
1 2 35 1100 College Married/Cohabitating Secondary
2 1 27 1600 College Single NA
3 1 59 2000 Secondary Married/Cohabitating Other
3 2 51 1800 Other Married/Cohabitating Secondary
我能想出的唯一想法是将分类变量转换为数字,使用我的方法,然后再次转换它们,但我确信它必须复杂得多。
谁能帮帮我?
【问题讨论】:
-
您能
dput(data)并将其粘贴到您的问题中吗?如果我们有您的数据样本,为您提供帮助会容易得多。此外,如果您可以发布所需输出的示例,那也会很有帮助。阅读有关提供minimal reproducible example 的更多信息。 -
@BenNorris 非常感谢!我要去
标签: r dataframe categorical-data tapply