首页 > 解决方案 > R,计算数据框中的非缺失日期,将计数作为列返回

问题描述

我有这个数据:

Times<-structure(list(record_id = c(1, 2, 3, 4, 5, 6), Date1 = structure(c(17385, 
17959, 17267, 17204, 17063, 18436), class = "Date"), Date2 = structure(c(17689, 
18001, NA, 17255, 17076, 18471), class = "Date"), Date3 = structure(c(NA, 
NA, NA, NA, 18052, 18499), class = "Date")), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

我想做的是计算每一行中存在的日期数(没有丢失),并将其作为新列中的计数返回。

像这样: 在此处输入图像描述

实际数据框在每个目标列之间有更多列,因此我希望能够明确命名我正在计算的列。

有任何想法吗?

标签: rdate

解决方案


我不确定您的第二个要求,但请检查这是否适合您:

library(tidyr)
library(dplyr)
Times %>% pivot_longer(cols = starts_with('Date'), names_to = 'Date') %>% 
  group_by(record_id) %>% mutate(Count = sum(!is.na(value))) %>% 
    pivot_wider(id_cols = c(record_id,Count), names_from = Date, values_from = value )
# A tibble: 6 x 5
# Groups:   record_id [6]
  record_id Count Date1      Date2      Date3     
      <dbl> <int> <date>     <date>     <date>    
1         1     2 2017-08-07 2018-06-07 NA        
2         2     2 2019-03-04 2019-04-15 NA        
3         3     1 2017-04-11 NA         NA        
4         4     2 2017-02-07 2017-03-30 NA        
5         5     3 2016-09-19 2016-10-02 2019-06-05
6         6     3 2020-06-23 2020-07-28 2020-08-25

推荐阅读