r-根据列条件拆分数据帧



我正在寻找内置的R函数,以便根据列值的条件将data.frame拆分为数据帧列表。

为了举例说明,请考虑下面的data.frame

date         var_1       var_2        
date_1       a           b            
date_1       b           a            
date_2       c           b            
date_2       b           c            
date_2       a           b            
date_2       b           a            

具体分组条件为:

var_1 %in% var_2 & var_2 %in% var_1 & date == date_x

其中CCD_ 4贯穿CCD_。这些条件定义了三组:

date         var_1       var_2        
date_1       a           b            
date_1       b           a            
date         var_1       var_2        
date_2       c           b            
date_2       b           c            
date         var_1       var_2        
date_2       a           b            
date_2       b           a            

使用dplyr,您可以使用sortvar_1var_2rowwise以及split获得相等的datesorted值。

library(dplyr)
df %>% 
rowwise() %>% 
mutate(sorted = list(sort(c(var_1, var_2)))) %>% 
group_by(date, sorted) %>% 
group_split() %>% 
map(~ select(.x, -sorted))

输出

[[1]]
# A tibble: 2 × 3
date   var_1 var_2
<chr>  <chr> <chr>
1 date_1 a     b    
2 date_1 b     a    
[[2]]
# A tibble: 2 × 3
date   var_1 var_2
<chr>  <chr> <chr>
1 date_2 a     b    
2 date_2 b     a    
[[3]]
# A tibble: 2 × 3
date   var_1 var_2
<chr>  <chr> <chr>
1 date_2 c     b    
2 date_2 b     c    

最新更新