当一行重复时,标记它是来自一个组,另一个组还是两个组?

问题描述

我有一个重复的ID和一个标签的数据框。如何使用tidyr或相关工具从第一个数据帧转到第二个数据帧?我需要删除重复的行,并标记每行是否存在于“ a”组,“ b”组或“两者”中。

library(tidyverse)

df <- tibble(id=c(1,2,3,4,4),label=c("a","a","b","b"))

# A tibble: 6 x 2
     id label
  <dbl> <chr>
1     1 a    
2     2 a    
3     2 b    
4     3 b    
5     4 a    
6     4 b    

df_desired <- tibble(id=c(1,"both","both"))

# A tibble: 4 x 2
     id label
  <dbl> <chr>
1     1 a    
2     2 both 
3     3 b    
4     4 both 

解决方法

使用dplyr的另一种方法可以是:

library(tidyverse)
#Data
df <- tibble(id=c(1,2,3,4,4),label=c("a","a","b","b"))
#Code
df %>% group_by(id) %>% summarise_all(toString) %>%
  mutate(label=ifelse(nchar(label)==1,label,'both'))

输出:

# A tibble: 4 x 2
     id label
  <dbl> <chr>
1     1 a    
2     2 both 
3     3 b    
4     4 both 
,

这是使用summarise

的可能解决方案
df %>%
  group_by(id) %>%
  summarise(label = if_else(length(unique(label)) == 2,"both",first(label)),.groups = "drop")

# A tibble: 4 x 2
     id label
  <dbl> <chr>
1     1 a    
2     2 both 
3     3 b    
4     4 both