我必须从df中删除与特定条件有关的行。

我有一个简单的df

sentID   partner  sentence
  A        B        C
  A        B        D
  B        C        E
  B        C        F
  B        A        S


并且我想删除sendID和合作伙伴相等且同时sendID未与另一个合作伙伴值关联的对象。 (即,特定的sendID不会仅显示具有相同的合作伙伴值。)
否则,我必须保留该行。

sentID   partner  sentence
  B        C        E
  B        C        F
  B        A        S


在输出示例中,包含sendID A的行被删除,因为它仅与伙伴B一起出现。 SentID B被保留,因为它与伙伴C和A一起出现。

我该怎么办?

谢谢您的建议!

最佳答案

这是一个dplyr解决方案:



df <- data.frame(sentID = c("A", "A", "B", "B", "B"),
                  partner = c("B", "B", "C", "C", "A"))

df
#>   sentID partner
#> 1      A       B
#> 2      A       B
#> 3      B       C
#> 4      B       C
#> 5      B       A

library(dplyr)

df %>% group_by(sentID) %>% filter(length(unique(partner)) > 1)
#> # A tibble: 3 x 2
#> # Groups:   sentID [1]
#>   sentID partner
#>   <fctr>  <fctr>
#> 1      B       C
#> 2      B       C
#> 3      B       A


reprex package(v0.2.1)于2019-01-10创建

07-28 00:54