gpt4 book ai didi

r - R中每个id的最早日期

转载 作者:行者123 更新时间:2023-12-04 10:06:57 25 4
gpt4 key购买 nike

我有一个数据集,其中每个人 (id) 都有一个 e_date,并且由于每个人可能有多个 e_date,因此我正在尝试获取每个人的最早日期。所以基本上我想要一个数据集,每个 id 一行显示他最早的 e_date 值。
我已经使用聚合函数来查找最小值,我已经创建了一个结合日期和 id 的新变量,最后我已经使用创建的新变量基于包含最小值的数据集对原始数据集进行了子集化。我来到了这个:

new <- aggregate(e_date ~ id, data_full, min)

data_full["comb"] <- NULL
data_full$comb <- paste(data_full$id,data_full$e_date)

new["comb"] <- NULL
new$comb <- paste(new$lopnr,new$EDATUM)

data_fixed <- data_full[which(new$comb %in% data_full$comb),]

第一件事是聚合函数似乎根本不起作用,它减少了行数,但查看数据我可以清楚地看到某些 id 以不同的 e_date 出现不止一次。另外,当我使用 as.Date 格式而不是它的原始日期格式(整数)时,代码给了我不同的结果。我认为答案很简单,但我对这个很感兴趣。

最佳答案

我们可以使用 data.table .将 'data.frame' 转换为 'data.table' ( setDT(data_full) ),按 'id' 分组,我们得到第一行 ( head(.SD, 1L) )。

library(data.table)
setDT(data_full)[order(e_date), head(.SD, 1L), by = id]

或使用 dplyr , 按 'id' 分组后, arrange 'e_date'(假设它是 Date 类)并使用 slice 获取第一行.
library(dplyr)
data_full %>%
group_by(id) %>%
arrange(e_date) %>%
slice(1L)

如果我们需要 base R选项, ave可以使用
data_full[with(data_full, ave(e_date, id, FUN = function(x) rank(x)==1)),]

关于r - R中每个id的最早日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38893696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com