在 R 的另一列中保留不唯一但具有不同标签的行

Keep rows which are not unique but have different labels in another column in R

我有一个名为 'dataframe'

的数据框

它有一列 'exposures' 例如ABC、DEF、GHI 和一列 'labels' 红色和黄色。它们可以位于标记为 'red' 的一行或标记为 'red' 的多行,也可以位于标记为 'yellow' 和 'red'

的多行
Exposure   Label
ABC        yellow
DEF        yellow
GHI        red
GHI        red
GHI        red
JKL        yellow
DEF        red
ABC        yellow
ABC        red

如何提取多次但颜色不同的?所以在这里我想保留 ABC,因为它既有黄色又有红色,但失去 GHI,因为它们只有红色。

到目前为止,我只能保留那些非唯一的

both <- dataframe %>% group_by(Exposure) %>% filter(n()>1)

但无法弄清楚如何指定保留那些仅具有不同标签而不是相同标签的标签?

谢谢!

您可以将两列合并成一个新列,然后使用 unique 进行子集化。

df$x <- paste(df$Exposure,df$Label)

df <- df[!duplicated(df$x), ]

一切顺利, 库尔特

library(data.table)
# Sample data
DT <- fread("Exposure   Label
ABC        yellow
DEF        yellow
GHI        red
GHI        red
GHI        red
JKL        yellow
DEF        red
ABC        yellow
ABC        red")

# Filter based more than 1 unique Label by Exposure-group
DT[, if(uniqueN(Label) > 1) .SD, by = Exposure]

#    Exposure  Label
# 1:      ABC yellow
# 2:      ABC yellow
# 3:      ABC    red
# 4:      DEF yellow
# 5:      DEF    red

基本 R 选项

subset(
  dataframe,
  ave(Label, Exposure, FUN = function(x) length(unique(x))) > 1
)

给予

  Exposure  Label
1      ABC yellow
2      DEF yellow
7      DEF    red
8      ABC yellow
9      ABC    red

n() 会给出组中的行数,n_distinct(Label) 会给出唯一值的计数。

library(dplyr)
dataframe %>% group_by(Exposure) %>% filter(n_distinct(Label)>1) %>% ungroup

#  Exposure Label 
#  <chr>    <chr> 
#1 ABC      yellow
#2 DEF      yellow
#3 DEF      red   
#4 ABC      yellow
#5 ABC      red