例如,假设有一个数据集如下所示

编辑:为额外的上下文添加了日期和数字列

ID|Date  |Col1|Col2|Col3|Num
 1  10-10  Y             5    
 1  10-10  Y    Y        5 
 1  10-10            Y   5
 2  09-17  Y             6
 2  09-17            Y   6
 3  12-14       Y        7
 3  12-14  Y             7 
 4  06-06  Y             8
 4  06-06

有没有办法得到这样的输出呢?

ID|Date  |Col1|Col2|Col3|Num
 1  10-10  Y    Y    Y   5    
 2  09-17  Y         Y   6
 3  12-14  Y    Y        7
 4  06-06  Y             8
structure(list(ID = c("000001", "000001", "000001", "000001", 
"000001", "000001", "000001", "000001", "000001", "000001", "000002", 
"000002", "000002", "000003", "000003", "000003", "000003", "000003", 
"000003", "000003"), Date = structure(c(1570492800, 1570492800, 
1570492800, 1570492800, 1570492800, 1570492800, 1570492800, 1570492800, 
1570492800, 1570492800, 1570665600, 1570665600, 1570665600, 1570838400, 
1570838400, 1570838400, 1570838400, 1570838400, 1570838400, 1570838400
), tzone = "UTC", class = c("POSIXct", "POSIXt")), Col1 = c(NA, 
NA, NA, NA, "Y", NA, NA, "Y", NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, NA, NA), Col2 = c("Y", "Y", "Y", "Y", "Y", "Y", "Y", 
"Y", "Y", "Y", "Y", "Y", "Y", NA, NA, NA, NA, "Y", "Y", "Y"), 
    Col3 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
    NA, NA, "Y", NA, NA, "Y", "Y", "Y"), Num1 = c(1, 1, 1, 1, 
    1, 1, 1, 1, 1, 1, 861, 861, 861, 497, 497, 497, 497, 497, 
    497, 497)), row.names = c(NA, -20L), class = c("tbl_df", 
"tbl", "data.frame"))

推荐答案

我们可以通过循环across剩余的列(everything())并提取第一个非NA元素,按‘ID’、‘Date’和summarise进行分组

library(dplyr)
df2 %>%  
   group_by(ID, Date) %>%
   summarise(across(everything(),  ~.x[!is.na(.x)][1]),
     .groups = 'drop')

-输出

# A tibble: 3 × 6
  ID     Date                Col1  Col2  Col3   Num1
  <chr>  <dttm>              <chr> <chr> <chr> <dbl>
1 000001 2019-10-08 00:00:00 Y     Y     <NA>      1
2 000002 2019-10-10 00:00:00 <NA>  Y     <NA>    861
3 000003 2019-10-12 00:00:00 <NA>  Y     Y       497

R相关问答推荐

从R中的地址提取街道名称

如何判断R中一列的值是否在所有其他列中重复?

如何使用Cicerone指南了解R Shiny中传单 map 的元素?

咕噜中的元素列表:map

ggplot2中的X轴显示数值,单位为百,而不是十

然后根据不同的列值有条件地执行函数

在R中将特定列的值向右移动

如何在区分不同条件的同时可视化跨时间的连续变量?

即使硬币没有被抛出,也要保持对其的跟踪

一小时满足条件的日期的 Select

打印XTS对象

解析R函数中的变量时出现的问题

如何指定我的函数应该查找哪个引用表?

如何在PackageStatus()中列出&q;不可用的包&q;?

R+reprex:在呈现R标记文件时创建可重现的示例

如何使用字符串从重复的模式中提取多个数字?

使用同一行中的前一个值填充R矩阵中的缺失值

如何将图例文本添加到图例符号中

如何在访问之前下载的输入时同时上传和处理所有指定的shiny 输入?

使用dqur在不同变量上创建具有多个条件的变量