首页 > 解决方案 > R中按条件选择性合并行

问题描述

我有一个如下所示的 data.frame:

ID 时间 价值
一个 T1 向上
一个 T2
一个 T3
T1 向上
T2
T3
T1
T2
T3 向上
C T1 向上
C T2
C T3
C T1
C T2
C T3

我想像这样合并它

ID 时间 价值
一个 T1 向上
一个 T2
一个 T3
T1 向上
T2
T3 向上
C T1 向上
C T2
C T3

说明:如果A(ID)和B(时间)列相同,则合并C(值)列;但是,C(值)列是类别类型(只有三种:向上、向下和无)。合并时,始终保持 up 或 down,但如果合并的行同时包含两者(up 和 no,或 down 和 no),则不是 no。如果合并的行只包含 no,则保留 no。

我在文件中有超过 5000 行,因此只想在特定时间保留具有特定值的唯一 ID(向上或向下,或者两者都没有)。

标签: rdataframemergeconditional-statements

解决方案


这是否有效:

library(dplyr)
df %>% group_by(ID, Time) %>% filter(all(value == 'no') | value !='no') %>% distinct()
# A tibble: 9 x 3
# Groups:   ID, Time [9]
  ID    Time  value
  <chr> <chr> <chr>
1 A     T1    up   
2 A     T2    down 
3 A     T3    no   
4 B     T1    up   
5 B     T2    down 
6 B     T3    up   
7 C     T1    up   
8 C     T2    no   
9 C     T3    down 

推荐阅读