【问题标题】:Make new column with periods based on another column with years基于另一列年份创建新列
【发布时间】:2021-04-15 20:11:19
【问题描述】:

我正在尝试根据另一列在我的 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&<="

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

【问题讨论】:

  • 请提供您的数据样本,将其输入dput() 并发布输出。
  • TB2 和 TB3 的语法 &amp;&lt;= 错误应该是 ar &gt;= 1997 &amp; ar &lt;= 2003

标签: r dplyr case-when


【解决方案1】:

&amp;&lt;= 语法在某些其他语言中可能是可以接受的,但在 R 中,语法应该在两个由&amp; 连接的表达式中都有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 的代码错误在哪里

【讨论】:

    【解决方案2】:

    您实际上不需要&amp;,因为您是按顺序工作的,您也可以使用TRUE 完成:

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

    【讨论】:

      【解决方案3】:

      你也可以这样做:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-25
        相关资源
        最近更新 更多