【问题标题】:how to check values in one column are all identical by a second grouping variable?如何通过第二个分组变量检查一列中的值是否相同?
【发布时间】:2018-02-02 05:36:47
【问题描述】:

我正在使用 r 来分析一些长格式的数据。我有一列是一个分组变量,其中包含参与者 ID,另一个变量包含他们的性别。

例如

ID SEX
1   M
1   M
2   F
2   F
2   M

我想检查是否有任何 ID 的性别编码不一致,例如上面的 ID=2。有没有办法做到这一点?我一直在玩 dplyr 和 group_by 函数,但我不知所措。任何帮助将不胜感激。

就输出而言,我可能想要在 SEX 列中具有不同值的所有唯一 ID 值的向量。

【问题讨论】:

  • 我想我想要一个包含所有在 SEX 列中具有不同值的唯一 ID 值的向量。这有意义吗?
  • 所以你的意思是你想识别那些编码不是 (M-1 & F-2) 的 id。就像最后一行?
  • 不,我想识别 ID 的值,如 ID==2(第 3 到 5 行),其中 SEX 的值不一致(例如,它们并非全部 = M 或它们不全部 = F)。
  • 这将为您提供唯一 ID:df %>% group_by(ID) %>% filter(n_distinct(SEX) >1) %>% distinct(ID) 。我相信还有其他多种方法可以做到这一点。

标签: r data-cleaning


【解决方案1】:

这是使用 ave() 的基本 R 灵魂 -

df[ave(df$SEX, df$ID, FUN = function(x) length(unique(x))) > 1, ]

  ID SEX
3  2   F
4  2   F
5  2   M

【讨论】:

    【解决方案2】:

    你可以试试这个。

    require(plyr)
    
    df <- data.frame(c(1,1,2,2,2), c('M','M','F','F','M'))
    names(df) <- c('ID','SEX')
    
    df2 <- ddply(df,.(ID), mutate, count = length(unique(SEX)))
    unique(df2[df2$count > 1,][1])
    

    结果:

    ID
    2
    

    【讨论】:

      猜你喜欢
      • 2021-03-20
      • 2022-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 2011-11-20
      • 1970-01-01
      • 2014-05-15
      相关资源
      最近更新 更多