所以我有这个df以及州和年份信息。我的目标是生成一个新变量 state_year ,以便1982年的阿拉巴马州被分配为1,1983年的阿拉巴马州被分配为2,1984年的阿拉巴马州被分配为3,依此类推。
当我尝试以下操作时,在正确的情况下我得到“ TRUE”,但我想说“ 1”(然后在1983年的AL中为2,依此类推)。
test <- df %>%
mutate(state_year = statefip == 1 & year == 1982)
答案 0 :(得分:1)
我们可以按“状态”分组并通过在“ statefip”,“ year”(假设列已排序)上应用rleid
来获得唯一ID。
library(data.table)
setDT(df)[, state_year := rleid(statefip, year), state]
或与dplyr
library(dplyr)
library(stringr)
df %>%
mutate(state_year = str_c(state_fip, year)) %>%
group_by(state) %>%
mutate(state_year = match(state_year, unique(state_year))
答案 1 :(得分:1)
对于每个state
,您可以将年份转换为factor
,然后转换为integer
,以获得唯一的数字。
library(dplyr)
df %>%
group_by(state) %>%
mutate(state_year = as.integer(factor(year)))
如果要为每个州/年份组合指定唯一的数字,可以将state
和year
粘贴在一起,然后转换为factor
,然后转换为integer
。
df %>%
mutate(state_year = paste0(state, year),
state_year = as.integer(factor(state_year, levels = unique(state_year))))