【问题标题】:Exclude rows where value used in another row排除值在另一行中使用的行
【发布时间】:2022-11-24 03:55:38
【问题描述】:

假设您有以下数据集:


df = data.frame(ID = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20), gender= c(1,2,1,2,2,2,2,1,1,2,1,2,1,2,2,2,2,1,1,2),
                paar = c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10))
                    

我如何编写代码来删除 df 中性别和 PID 相同的行(见图)。请想象一下代码超过 1000 行(因此它应该是一个自动搜索要排除的正确值的解决方案)。

【问题讨论】:

  • 试试library(dplyr);df %>% add_count(gender, paar) %>% filter(n == 1)

标签: r dataframe if-statement tidyr base


【解决方案1】:

基础R

df[ave(rep(TRUE, nrow(df)), df[,c("gender","paar")], FUN = function(z) !any(duplicated(z))),]
#    ID gender paar
# 1   1      1    1
# 2   2      2    1
# 3   3      1    2
# 4   4      2    2
# 7   7      2    4
# 8   8      1    4
# 9   9      1    5
# 10 10      2    5
# 11 11      1    6
# 12 12      2    6
# 13 13      1    7
# 14 14      2    7
# 17 17      2    9
# 18 18      1    9
# 19 19      1   10
# 20 20      2   10

dplyr

library(dplyr)
df %>%
  group_by(gender, paar) %>%
  filter(!any(duplicated(cbind(gender, paar)))) %>%
  ungroup()

【讨论】:

    【解决方案2】:

    base R 中,我们可以在删除 'gender' 和 'paar' 的组计数不为 1 的观察后使用 subset

    subset(df, ave(seq_along(gender), gender, paar, FUN = length) == 1)
    

    duplicated

     df[!(duplicated(df[-1])|duplicated(df[-1], fromLast = TRUE)),]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      相关资源
      最近更新 更多