微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除包含在另一列中有多个匹配项的一列中的值的任何数据框行

如何解决删除包含在另一列中有多个匹配项的一列中的值的任何数据框行

假设我有这个(简化的)数据框:

C1 <- c('a','a','b','c','c')
C2 <- c(10,10,20,21,30,30)
C3 <- c(1.1,2.2,3.3,4.4,5.5,6.6)
df <- data.frame(C1,C2,C3)
C1 C2 C3
10 1.1
10 2.2
b 20 3.3
b 21 4.4
c 30 5.5
c 30 6.6

我想要做的是删除包含 C1 值的任何行,该值在 C2 列中具有多个匹配项。在这种情况下,我想删除 C1 列中包含 'b' 的整行(因为 'b' 在 C2 列中有两个匹配项 - 20 和 21)。

这应该导致此 df:

C1 C2 C3
10 1.1
10 2.2
c 30 5.5
c 30 6.6

任何帮助将不胜感激!

谢谢,

尤瓦尔

解决方法

子集是一种方法:

C1 <- c('a','a','b','c','c')
C2 <- c(10,10,20,21,30,30)
C3 <- c(1.1,2.2,3.3,4.4,5.5,6.6)
df <- data.frame(C1,C2,C3)

df_table <- table(df$C2)
df_subset <- subset(df,C2 %in% names(df.table[df.table > 1]))
df_subset
,

dplyr 是另一种方法。使用 group_by 分别处理每个 C1 组,然后 filter 每个组,只保留单个值为 C2

的组
library(dplyr)

C1 <- c('a',C3)

df <- df %>%
    group_by(C1) %>%
    filter(length(unique(C2)) == 1) %>%
    ungroup()

print(df)

输出

# A tibble: 4 x 3
  C1       C2    C3
  <chr> <dbl> <dbl>
1 a        10   1.1
2 a        10   2.2
3 c        30   5.5
4 c        30   6.6

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。