我有一个这样的框架:
Issuer.Name Issue.Date
name1 01/12/2021
name2 05/04/2022
name2 21/10/2021
name3 08/09/2020
name4 30/08/2023
name4 12/05/2021
name4 18/10/2022
name5 01/12/2021
我想创建一个新的因子变量“Y/N”,它根据Issuer.Name检查这是否是组Issuer. Name的第一个Issue.Date。它应该返回这样的东西:
Issuer.Name Issue.Date First.Issue.Date
name1 01/12/2021 Y
name2 05/04/2022 N
name2 21/10/2021 Y
name3 08/09/2020 Y
name4 30/08/2023 N
name4 12/05/2021 Y
name4 18/10/2022 N
name5 01/12/2021 Y
我使用了这个命令,它工作得很好,但我认为当然可以做一些更简洁的事情
df <- df %>%
group_by(Issuer.Name) %>%
arrange(Issue.Date) %>%
mutate(First.Issue.Date = Issue.Date[1]) %>%
mutate(First.Issue=case_when(Issue.Date==First.Issue.Date~"Y",.default = "N"))
1条答案
按热度按时间bgtovc5b1#
问题是你不是在寻找 * 第一个 * 日期,你在寻找 * 最早的日期 *。如果你的数据是排序过的,这些都是一样的,但它不是,所以它们不是。
备注:
1.一般来说,包括true和false作为除了TRUE或TRUE之外的任何东西都是不受欢迎的,因为它占用了更多的空间,并且处理起来更痛苦,并且可能导致奇怪的错误(例如,如果你后来忘记了,开始使用“y”和“n”,或者“yes”和“no”,那么什么都不匹配)。
1.此外,在变量名中使用斜杠,虽然你可以这样做,但它可能会导致bug,因为没有反引号,R将Y/N解释为变量Y除以变量N,这是不好的。
1.当使用
group_by()
时,最好在最后使用ungroup()
(或者更好的是,像我一样使用.by
,因为它不必记住这样做)。在过去的几个月里,我个人至少见过六个人,他们最终忘记了ungroup()
,然后被他们的代码为什么没有给出正确的结果所迷惑。数据类型: