r - DPLYR - 使用列值作为条件将行合并在一起

标签 r dplyr rows

我在一个数据框中有一系列行。我正在尝试聚合每个 ID 的前两行 - 即 - 我想将 ID 1 的事件 1 和 2 组合成一行,将 ID 2 的事件 1 和 2 组合成单行等,但完全保留事件 3未受影响。

id <- c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5)

event <- c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3)

score <- c(3,NA,1,3,NA,2,6,NA,1,8,NA,2,4,NA,1)

score2 <- c(NA,4,1,NA,5,2,NA,0,3,NA,5,6,NA,8,7)

df <- tibble(id, event, score, score2)
# A tibble: 15 x 4
      id event score score2
   <dbl> <dbl> <dbl>  <dbl>
 1     1     1     3     NA
 2     1     2    NA      4
 3     1     3     1      1
 4     2     1     3     NA
 5     2     2    NA      5
 6     2     3     2      2
 7     3     1     6     NA
 8     3     2    NA      0
 9     3     3     1      3
10     4     1     8     NA
11     4     2    NA      5
12     4     3     2      6
13     5     1     4     NA
14     5     2    NA      8
15     5     3     1      7

我已经尝试过:

 df_merged<- df %>% group_by (id) %>% summarise_all(funs(min(as.character(.),na.rm=TRUE))),

它很好地聚合了这些,但后来我很难将它们合并回原始数据帧/tibble(完整数据集中实际上有大约 300 个不同的“分数”列,因此 right_join 对于 Score.x、score 来说是一个令人头疼的问题.y、score2.x、score2.y 到处都是...)

理想情况下,情况需要是 dplyr,因为我的其余代码在此运行!

编辑:

理想情况下,我的预期输出是:

# A tibble: 10 x 4
      id event score score2
   <dbl> <dbl> <dbl>  <dbl>
 1     1     1     3      4
 3     1     3     1      1
 4     2     1     3      5
 6     2     3     2      2
 7     3     1     6      0
 9     3     3     1      3
10     4     1     8      5
12     4     3     2      6
13     5     1     4      8
15     5     3     1      7

最佳答案

我们可以使用replace更改NA元素的顺序

library(dplyr)
df %>%
    group_by(id) %>%
     mutate(across(starts_with('score'),
         ~replace(., 1:2, .[1:2][order(is.na(.[1:2]))])))  %>% 
    ungroup  %>%   
    filter(if_all(starts_with('score'), Negate(is.na)))    

-输出

# A tibble: 10 x 4
      id event score score2
   <dbl> <dbl> <dbl>  <dbl>
 1     1     1     3      4
 2     1     3     1      1
 3     2     1     3      5
 4     2     3     2      2
 5     3     1     6      0
 6     3     3     1      3
 7     4     1     8      5
 8     4     3     2      6
 9     5     1     4      8
10     5     3     1      7

关于r - DPLYR - 使用列值作为条件将行合并在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69238353/

相关文章:

r - 在包中使用 cbind、rbind 和 s4 类的正确方法

r - 如何改进ggplot2中的锯齿线图?

r - 不带任何键并排粘贴 2 个数据框

php - MySQL 行数与 PHP 并显示结果

使用单个命令运行具有不同参数的函数列表

c++ - 在 C++ 源代码树中包含 R 独立库

r - 计算 R 中疾病的首次出现次数

R:用于特征提取的循环函数编码有问题吗?

android - 如何在 Open cv for Android 上访问 Vector<Mat> 图像的行和列?

mysql - 将 mysql 查询行转置为列