我正在尝试在我的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&<="
我试着寻找答案,但什么也找不到。有人能帮上忙吗?
发布于 2021-04-15 20:20:17
语法&<=
在某些其他语言中可能是可接受的,但在R
中,语法在两个表达式中都应该有由&
连接的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的代码错误所在
发布于 2021-04-15 20:33:40
您实际上并不需要&
,因为您是按顺序工作的,而且您还可以使用TRUE
来完成
dat.cp2 %>%
mutate(
TB = case_when(ar <= 1996 ~ 'TB1',
ar <= 2003 ~ 'TB2',
ar <= 2010 ~ 'TB3',
TRUE ~ 'TB4')
)
发布于 2021-04-15 20:25:02
您还可以执行以下操作:
dat.cp2 %>%
mutate(TB = cut(ar, breaks = c(1989,1996, 2003, 2010, 2017),
labels = c("TB1", "TB2","TB3","TB4")))
https://stackoverflow.com/questions/67115435
复制