根据另一列有年份的时间段制作新列

Make new column with periods based on another column with years

我正在尝试根据另一列在我的 data.frame 中创建一个新列。

我的数据框名为 dat.cp2,其中一列包含 1990-2017 的特定年份 在这里您可以看到我的数据的外观。 “ar”列表示年份。

我需要创建一个名为“TB”的新专栏,其中包含句点。例如,第一个时期是 1990-1996,我希望那个时期被称为“TB1”。1997-2003 是“TB2”等。所以对于 1995 年出生的人,新栏说“TB1”。

我试过了:

dat.cp2 %>% mutate(TB =
                     case_when(ar <=1996 ~ "TB1",
                               ar >=1997&<=2003 ~ "TB2",
                               ar >=2004&<=2010 ~ "TB3",
                               ar >=2011 ~ "TB4")

但我收到错误消息:

Error: unexpected '<=' in:
"                     case_when(ar <=1996 ~ "TB1",
                               ar >=1997&<="

我已经尝试寻找答案,但找不到任何答案.. 任何人都可以帮忙吗?

语法 &<= 在某些其他语言中可能是可以接受的,但在 R 中,语法在由 &[=15 连接的两个表达式中应该具有 ar =]

library(dplyr)
dat.cp2 %>% 
         mutate(TB =
                 case_when(ar <=1996 ~ "TB1",
                           ar >=1997 & ar <=2003 ~ "TB2",
                           ar >=2004 & ar <=2010 ~ "TB3",
                           ar >=2011 ~ "TB4"))

注意:有很多方法可以简化。但是,这只是为了说明 OP 的代码错误在哪里

您还可以这样做:

dat.cp2 %>%
   mutate(TB = cut(ar, breaks = c(1989,1996, 2003, 2010, 2017),
                       labels = c("TB1", "TB2","TB3","TB4")))

你实际上并不需要 & 因为你是按顺序工作的,你也可以用 TRUE:

来完成
dat.cp2 %>% 
  mutate(
    TB = case_when(ar <= 1996 ~ 'TB1',
                   ar <= 2003 ~ 'TB2',
                   ar <= 2010 ~ 'TB3',
                   TRUE ~ 'TB4')
  )