r - 使用方程式计算新列的多列
问题描述
我是一个相当新的 R 用户——试图根据论坛、视频和试错法自学。我有一个非常大的数据集,想计算家庭中被视为儿童(18 岁以下)的成员数量。我有一个家庭成员数量的列,以及每个家庭成员年龄的 11 个列。我最初的想法是选择 18 岁以下的人并从家庭成员总数中减去。我尝试了几行不同的代码都没有成功,我不确定如何最好地执行它。任何帮助是极大的赞赏!
解决方案
有几种方法可以做到这一点。我正在使用 libr 包中称为 datastep 的东西。
首先,这是您的数据:
df <- data.frame(num_hhmem = c(6, 4, 4, 5, 4, NA, 8, NA),
ChildAge = c(9, 8, 10, 10, 9, NA, 8, NA),
hhm2_Age = c(36, 44, 52, 40, 33, NA, 37, NA),
hhm3_Age = c(34, 16, 53, 15, 15, NA, 39, NA),
hhm4_Age = c(15, 10, 92, 17, 11, NA, NA, NA),
hhm5_Age = c(7, NA, NA, 20, NA, NA, 10, NA),
hhm6_Age = c(11, NA, NA, NA, NA, NA, 6, NA),
hhm7_Age = c(NA, NA, NA, NA, NA, NA, 68, NA),
hhm8_Age = c(NA, NA, NA, NA, NA, NA, 78, NA),
hhm9_Age = c(NA, NA, NA, NA, NA, NA, NA, NA))
然后我为要迭代的列设置了一个数组的数据步。此外,我还设置了一个值为 0 的 childCount 变量。datastep 将逐行遍历数据帧。因此,您只需遍历数组并将任何子项添加到 childCount 变量。
library(libr)
res <- datastep(df,
arrays = list(ages = dsarray("ChildAge", "hhm2_Age", "hhm3_Age",
"hhm4_Age", "hhm5_Age", "hhm6_Age",
"hhm7_Age", "hhm8_Age", "hhm9_Age")),
calculate = { childCount <- 0 },
drop = "age",
{
for(age in ages) {
if (!is.na(ages[age])) {
if (ages[age] < 18)
childCount <- childCount + 1
}
}
})
结果如下:
res
# num_hhmem ChildAge hhm2_Age hhm3_Age hhm4_Age hhm5_Age hhm6_Age hhm7_Age hhm8_Age hhm9_Age childCount
# 1 6 9 36 34 15 7 11 NA NA NA 4
# 2 4 8 44 16 10 NA NA NA NA NA 3
# 3 4 10 52 53 92 NA NA NA NA NA 1
# 4 5 10 40 15 17 20 NA NA NA NA 3
# 5 4 9 33 15 11 NA NA NA NA NA 3
# 6 NA NA NA NA NA NA NA NA NA NA 0
# 7 8 8 37 39 NA 10 6 68 78 NA 3
# 8 NA NA NA NA NA NA NA NA NA NA 0
推荐阅读
- bash - 在ansible中转义特殊字符
- django - 如果在 Celery 中将 retry_backoff 设置为 True,max_retries 和 retry_backoff_max 是什么意思?
- postgresql - Postgres:带有可选“WHERE”参数的函数
- php - 如何在php中优先考虑rabbitmq消息?
- java - 使用 iText 签名字段(数字签名与电子签名图像) - 阅读
- java - 根据对象中的变量名而不是字符串正则表达式在springboot中屏蔽敏感数据
- c++ - 推断函数指针的模板参数
- android - 如何在 exoplayer 中实现 OkHttpDataSourceFactory?
- ipc - NW.js 在孩子中接收消息不起作用?
- numpy - 为什么用 matplotlib 绘图会改变带有复杂条目的 numpy.linalg.inv 反转的第一个结果以及如何避免它?