r - 如何只选择 R 中每个组的第一个非 NA 值?

标签 r group-by subject

我有一个像这样的数据框

mydata <- data.frame(Id=c(01,01,01,01,01,01,02,02,02,02),
                     VISIT=c("Screeing","Baseline","Baseline","Baseline","Week 9","Week 9","Baseline","Week 2",
                             "Week 2","Week 2"),
                    Score=c(1,2,4,5,78,9,5,NA,3,4))

> mydata
   Id    VISIT Score
1   1 Screeing     1
2   1 Baseline     2
3   1 Baseline     4
4   1 Baseline     5
5   1   Week 9    78
6   1   Week 9     9
7   2 Baseline     5
8   2   Week 2     NA
9   2   Week 2     3
10  2   Week 2     4

我想做的是按 Id 和 VISIT 分组,然后选择每个组的第一个非 NA 值作为

> mydata

      Id VISIT    Score 
   <dbl> <fct>    <dbl> 
 1     1 Screeing     1     
 2     1 Baseline     2     
 5     1 Week 9      78    
 7     2 Baseline     5     
 9     2 Week 2       3     

这是我想到的

mydata<-mydata %>%
 group_by(Id,VISIT) %>% 
 mutate(first = dplyr::first(na.omit(Score)))

但它不会删除其他行,它只是创建一个新列,其中包含每个组的第一个非 NA 的重复值。

最佳答案

如果 base R 没问题,试试这个。默认情况下省略 NA

aggregate( Score ~ Id + VISIT, mydata, function(x) x[1] )

  Id    VISIT Score
1  1 Baseline     2
2  2 Baseline     5
3  1 Screeing     1
4  2   Week 2     3
5  1   Week 9    78

关于r - 如何只选择 R 中每个组的第一个非 NA 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70177398/

相关文章:

围绕分隔符反转数据框名称?

angular - 如何在 Angular 2 模板中对数据和输出进行分组——使用管道?

mysql - 按一段时间内的客户 ID 进行分组

objective-c - Objective-C : Send email with subject and body and switching app

r - 在 R 中对嵌套列表进行子集化

r - 在 Shiny 中,如何根据选择添加标志性的复选框组输入以创建数据表,其中包含列名称上的图标而不是文本?

mysql - 输出 MySQL 记录列表,按类别分组?

session-timeout - Shiro 在 2 分钟后重置 session

html - HTML 标记属性值内的换行符

r - 如何使用ggplot2创建一维图表?