【问题标题】:Keep the key that has only one specific value in R保留在 R 中只有一个特定值的键
【发布时间】:2019-07-09 00:01:59
【问题描述】:

我有以下数据框

filen<-c('510-1','510-2','510-2','510-2','510-3','510-3','510-4')
disp<-c('g','ng','ng','ng','g','ng','ng')

df<-data.frame(filen,disp)


  filen disp
1 510-1    g
2 510-2   ng
3 510-2   ng
4 510-2   ng
5 510-3    g
6 510-3   ng
7 510-4   ng

基本上,我想隔离 ng 是与该文件关联的唯一类型的 disp 的文件号。这样我就得到了这样的数据集。我如何使用 dplyr 来做到这一点

filen disp
510-2  ng
510-4  ng

【问题讨论】:

  • 非常类似于herehere
  • @akrun 我不认为这个问题完全是对那些问题的欺骗,这就是我没有投票结束的原因,但我确实认为它们足够相似,可以帮助 OP 和未来的用户的网站。这与你的回答没有任何关系,除了你在这些帖子上几乎相同的答案就是我所说的对 OP 有帮助的事实

标签: r dplyr


【解决方案1】:

我们可以通过 'filen'、filter 分组 all 'disp' 值为 'ng' 的组并得到 distinct

library(dplyr)
df %>%
   group_by(filen) %>%
   filter( all(disp == 'ng')) %>%
   distinct
# A tibble: 2 x 2
# Groups:   filen [2]
#  filen disp 
#   <fct> <fct>
#1 510-2 ng   
#2 510-4 ng   

或者

df %>% 
   distinct %>%
   group_by(filen) %>%
   filter(n_distinct(disp) == 1, disp == 'ng')

或者我们可以使用data.table

library(data.table)
setDT(unique(df))[,  .SD[uniqueN(disp)==1 & disp == "ng"], filen]

【讨论】:

    【解决方案2】:

    使用基数R,我们可以选择使用table计算df的频率,找到filenng值大于0和g值等于0并只保留unique 行。

    df1 <- as.data.frame.matrix(table(df))
    unique(df[df$filen %in% rownames(df1)[df1$ng > 0 & df1$g == 0], ])
    
    #  filen disp
    #2 510-2   ng
    #7 510-4   ng
    

    ave

    unique(df[ave(df$disp == "ng", df$filen, FUN = all), ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 2022-09-29
      • 2023-03-20
      • 2022-08-21
      相关资源
      最近更新 更多