根据条件生成新变量

时间:2020-08-19 22:25:51

标签: r dplyr tidyverse data-manipulation data-cleaning

所以我有这个df以及州和年份信息。我的目标是生成一个新变量 state_year ,以便1982年的阿拉巴马州被分配为1,1983年的阿拉巴马州被分配为2,1984年的阿拉巴马州被分配为3,依此类推。

当我尝试以下操作时,在正确的情况下我得到“ TRUE”,但我想说“ 1”(然后在1983年的AL中为2,依此类推)。

test <- df %>%
    mutate(state_year = statefip == 1 & year == 1982)

enter image description here

2 个答案:

答案 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)))

如果要为每个州/年份组合指定唯一的数字,可以将stateyear粘贴在一起,然后转换为factor,然后转换为integer

df %>%
  mutate(state_year = paste0(state, year), 
         state_year = as.integer(factor(state_year, levels = unique(state_year))))