r - 查找每个组的第一个实例并填充到 R 中的新列
问题描述
我有以下df:
ID Date
1 01/01/2018
2 01/01/2010
2 01/01/2012
2 01/01/2013
3 01/01/2015
3 01/01/2018
我已经按 ID 升序对列进行了排序,但现在想找到每个 ID 的第一个日期实例(这将是最旧的日期)并用这个日期填充一个新列。
所以:
ID Date NewDate
1 01/01/2018 01/01/2018
2 01/01/2010 01/01/2010
2 01/01/2012 01/01/2010
2 01/01/2013 01/01/2010
3 01/01/2015 01/01/2015
3 01/01/2018 01/01/2015
一如既往地感谢任何帮助。
解决方案
由于数据已经排序,您可以first
从每个组中获取价值
library(dplyr)
df %>%
group_by(ID) %>%
mutate(NewDate = first(Date))
# ID Date NewDate
# <int> <fct> <fct>
#1 1 01/01/2018 01/01/2018
#2 2 01/01/2010 01/01/2010
#3 2 01/01/2012 01/01/2010
#4 2 01/01/2013 01/01/2010
#5 3 01/01/2015 01/01/2015
#6 3 01/01/2018 01/01/2015
在 Base R 中,我们可以使用ave
df$NewDate <- with(df, ave(Date, ID, FUN = function(x) x[1]))
df
# ID Date NewDate
#1 1 01/01/2018 01/01/2018
#2 2 01/01/2010 01/01/2010
#3 2 01/01/2012 01/01/2010
#4 2 01/01/2013 01/01/2010
#5 3 01/01/2015 01/01/2015
#6 3 01/01/2018 01/01/2015
我们也可以使用head
withave
df$NewDate <- with(df, ave(Date, ID, FUN = head, 1))
或者按照@Hugh 的建议,使用min
提供Date
的列属于“日期”类
df$NewDate <- with(df, ave(Date, ID, FUN = min))
其中dplyr
将是
df %>%
group_by(ID) %>%
mutate(NewDate = min(Date))
推荐阅读
- api - Power bi Api Reresh 与 service principale 还是?
- android - 如何从另一个类的 Recycler View 中删除项目?
- angular - `“主”线程上发生未捕获的异常`新应用程序发生错误
- hibernate - 使用 ManyToMany 进行 LazyLoading 作为 EAGER
- yii2-advanced-app - How to use if condition in find() query?
- c++ - 生成具有附加扩展名的 X509 证书时出现问题
- cassandra - OpsCenter 的配置中是否有任何选项可以自动启动修复服务?
- python - 迁移中缺少外键
- excel - 代码在执行中途停止正常工作
- sql-server - DATEPART:指定不能使用 SET DATEFIRST 时的第一天