很抱歉没有提供数据。以下是一些示例数据:
PERCENT <- rnorm(100, sd = 3)
YEAR <- sample(c(1950, 1958, 1963, 1974, 1982, 1994), 100, replace = TRUE)
AGE <- sample(c(18:90), 100, replace = TRUE)
COUNTRY <- rep(c("Country A", "Country B"), 50)
df <- data.frame(PERCENT, YEAR, AGE, COUNTRY)
我正试图追踪年龄组。为此,我想为每个病例提供一个年龄组的唯一ID。我知道如何手动执行此操作,如下所示:
df %>%
filter(AGE >= 18 & AGE <= 27, YEAR == 1950 |
AGE >= 26 & AGE <= 36, YEAR == 1958 |
AGE >= 31 & AGE <= 40, YEAR == 1963 |
AGE >= 42 & AGE <= 51, YEAR == 1974 |
AGE >= 50 & AGE <= 59, YEAR == 1982 |
AGE >= 60 & AGE <= 69, YEAR == 1994) %>%
mutate(COHORT_ID = "18-27 in 1950")
但要在几个年龄段进行此操作需要大量打字。我正在尝试做一个循环或函数,它为年t中年龄x和y之间的所有人分配一个群组标签,并且在年t + u为x + u到y + u的人分配一个群组标签。
我尝试做一个函数,将最小年龄的向量,最大年龄的向量和调查波年的向量作为参数作为参数,并将标签添加到数据框中的新列。< / p>
这是我到目前为止所提出的:
function(xmin, xmax, year) {
df$cohort <- 0, #to initialize the column
### here the magic happens
}
我查看了this页面,但他们似乎在讨论别的事情。
如果有一种有效的方法可以在不使用功能的情况下完成此操作,我同样会感激不尽!提前谢谢!
编辑:我刚刚意识到,自年龄段(10年)和调查波(不规则间隔)不排列以来,每个观察可能属于几个队列类别。每个群组ID的虚拟变量会解决这个问题吗?答案 0 :(得分:0)
我不完全确定我理解你的问题;所以以下是基于我对你想要实现的目标的解释。
我们首先设置一个参考年份,在此基础上我们在不同的AGE
s表达不同的YEAR
值。在这里,我选择max(df$YEAR)
作为参考年份。
maxYEAR <- max(df$YEAR);
maxYEAR;
#[1] 1994
# Calculate age at reference year maxYEAR
df$normAGE <- maxYEAR - df$YEAR + df$AGE;
然后,我们可以使用1994
将标准化年龄值(参考年cut
)分类。
# Bin normalised years in 10 year bins
df$ageBin <- cut(df$normAGE, breaks = seq(0, max(df$normAGE) + 10, by = 10));
head(df);
# PERCENT YEAR AGE COUNTRY normAGE ageBin
#1 4.3026044 1974 41 Country A 61 (60,70]
#2 -0.2318759 1982 44 Country B 56 (50,60]
#3 2.2174117 1994 47 Country A 47 (40,50]
#4 -5.2758142 1994 43 Country B 43 (40,50]
#5 -0.2094757 1963 71 Country A 102 (100,110]
#6 1.3557166 1982 48 Country B 60 (50,60]
如有必要,我们可以使用as.numeric(df$ageBin)
获取bin号。
# Sample data
set.seed(2017);
PERCENT <- rnorm(100, sd = 3)
YEAR <- sample(c(1950, 1958, 1963, 1974, 1982, 1994), 100, replace = TRUE)
AGE <- sample(c(18:90), 100, replace = TRUE)
COUNTRY <- rep(c("Country A", "Country B"), 50)
df <- data.frame(PERCENT, YEAR, AGE, COUNTRY)