【问题标题】:Select which rows to keep when using the distinct function in R选择在 R 中使用 distinct 函数时要保留的行
【发布时间】:2021-02-11 17:27:38
【问题描述】:

我有一个如下所示的数据框:

  company eh
1       A  1
2       A  3
3       B  2
4       C  2
5       C  1
6       D  3
7       E  1
8       F  3
9       F  1

如您所见,我有重复的公司 A、C 和 F 行。这是因为某些公司可以在 'eh' 列中同时采用值 1、2 和 3。我希望每个公司只有一行,所以我运行以下代码:

df <- distinct(df, company, .keep_all = TRUE)

结果:

  company eh
1       A  1
2       B  2
3       C  2
4       D  3
5       E  1
6       F  3

但是,这会从“eh”列中删除随机行。但我想要的 'eh' 列是保持值 1 超过 2 和 3。换句话说,如果公司的 'eh' 值同时采用 1 和 3,我宁愿保留值为 1 的行。所以我想得到这样的结果(删除第 2、4 和 8 行):

  company eh
1       A  1
2       B  2
3       C  1
4       D  3
5       E  1
6       F  1

我该怎么做?

【问题讨论】:

  • 取决于您如何决定要删除哪些行 - 它总是在“eh”列中具有较高值的​​行吗?还是总是第二次出现,从上到下阅读?
  • Dubukay:我总是想保留“eh”取 1 的行。在这种情况下,您也可以说我想保留“eh”值最低的行。我不在乎是否保持 2 超过 3。只要它始终保持 1 超过其他

标签: r duplicates distinct


【解决方案1】:

base R,我们可以做

dat1 <- dat[order(dat$company, dat$eh),]
dat1[!duplicated(dat1$company),]

【讨论】:

    【解决方案2】:

    您可以先通过companyeh arrange 您的数据。 distinct 将保留第一行:

    dat <- read.table(text = "company eh
    1       A  1
    2       A  3
    3       B  2
    4       C  2
    5       C  1
    6       D  3
    7       E  1
    8       F  3
    9       F  1", header = TRUE)
    
    library(dplyr)
    
    dat %>% 
      arrange(company, eh) %>% 
      distinct(company, .keep_all = TRUE)
    #>   company eh
    #> 1       A  1
    #> 3       B  2
    #> 5       C  1
    #> 6       D  3
    #> 7       E  1
    #> 9       F  1
    

    reprex package (v1.0.0) 于 2021-02-11 创建

    【讨论】:

      猜你喜欢
      • 2020-10-25
      • 2018-07-01
      • 2013-05-01
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多