首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按组选择第二次最低日期并更改新列

按组选择第二次最低日期并更改新列
EN

Stack Overflow用户
提问于 2021-12-25 09:04:14
回答 2查看 98关注 0票数 1

我希望选择每个ID分组的第二个最低日期(如果超过一个日期),然后将结果突变为一个新列( new )。

代码语言:javascript
复制
   DF<-tibble::tribble(
      ~ID,        ~DATE, ~TYPE,
       1L, "2001-01-01",   "P",
       2L, "2002-02-02",   "P",
       2L, "2005-05-05",   "R",
       3L, "2001-10-10",   "R",
       4L, "2008-08-08",   "P",
       4L, "2010-10-10",   "R"
      )

# A tibble: 6 × 3
     ID DATE       TYPE 
  <int> <date>     <chr>
1     1 2001-01-01 P    
2     2 2002-02-02 P    
3     2 2005-05-05 R    
4     3 2001-10-10 R    
5     4 2008-08-08 P    
6     4 2010-10-10 R  

期望产出:

代码语言:javascript
复制
    ID DATE       TYPE  NEW       
  <int> <date>     <chr> <chr>     
1     1 2001-01-01 P     NA        
2     2 2002-02-02 P     2005-05-05
3     2 2005-05-05 R     2005-05-05
4     3 2001-10-10 R     NA        
5     4 2008-08-08 P     2010-10-10
6     4 2010-10-10 R     2010-10-10

我已经尝试了下面的代码,但是如果只有一个日期,我想不出如何用NA来修改新列。

代码语言:javascript
复制
DF%>%group_by(ID)%>%arrange(DATE)%>%slice_head(n=2)%>%slice_max(order_by=DATE,n=1)%>%pull(DATE)

向你问好,H

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-25 11:55:53

如果您的日期是按顺序排列的,则可以在一个组中选择第二个DATE作为DATE[2]

代码语言:javascript
复制
library(tidyverse)

DF %>%
  mutate(DATE = as.Date(DATE)) %>%
  group_by(ID) %>%
  arrange(ID, DATE) %>%
  mutate(NEW = DATE[2])

输出

代码语言:javascript
复制
     ID DATE       TYPE  NEW       
  <int> <date>     <chr> <date>    
1     1 2001-01-01 P     NA        
2     2 2002-02-02 P     2005-05-05
3     2 2005-05-05 R     2005-05-05
4     3 2001-10-10 R     NA        
5     4 2008-08-08 P     2010-10-10
6     4 2010-10-10 R     2010-10-10
票数 1
EN

Stack Overflow用户

发布于 2021-12-25 09:22:29

使用aveorder结合案例处理来生成NA's

代码语言:javascript
复制
transform(DF, NEW=ave(DATE, ID, FUN=\(x) {
  if (NROW(x) == 1)  NA
  else x[order(as.Date(x)) == 2]
  }))
#   ID       DATE TYPE        NEW
# 1  1 2001-01-01    P       <NA>
# 2  2 2002-02-02    P 2005-05-05
# 3  2 2005-05-05    R 2005-05-05
# 4  3 2001-10-10    R       <NA>
# 5  4 2008-08-08    P 2010-10-10
# 6  4 2010-10-10    R 2010-10-10

数据:

代码语言:javascript
复制
DF <- structure(list(ID = c(1L, 2L, 2L, 3L, 4L, 4L), DATE = c("2001-01-01", 
"2002-02-02", "2005-05-05", "2001-10-10", "2008-08-08", "2010-10-10"
), TYPE = c("P", "P", "R", "R", "P", "R")), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -6L))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70478990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档