R 如何通过第二个分组变量检查一列中的值是否完全相同?

R 如何通过第二个分组变量检查一列中的值是否完全相同?,r,data-cleaning,R,Data Cleaning,我用r来分析一些长格式的数据。我有一列是包含参与者ID的分组变量,另一列是包含参与者性别的变量 e、 g 我想检查是否有性别编码不一致的ID,例如上面的ID=2。有办法做到这一点吗?我一直在玩弄dplyr和group_的功能,但我不知所措。任何帮助都将不胜感激 就输出而言,我可能需要一个包含所有唯一ID值的向量,这些ID值在SEX列中具有不相同的值 你可以试试这个 require(plyr) df <- data.frame(c(1,1,2,2,2), c('M','M','F','F'

我用r来分析一些长格式的数据。我有一列是包含参与者ID的分组变量,另一列是包含参与者性别的变量

e、 g

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

就输出而言,我可能需要一个包含所有唯一ID值的向量,这些ID值在SEX列中具有不相同的值

你可以试试这个

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])

下面是一个使用
ave()的基本解决方案-


我想我想要一个包含所有唯一ID值的向量,这些ID值在SEX列中具有不相同的值。这有意义吗?那么你的意思是你想识别那些没有编码的ID(M-1和F-2)。像最后一行一样?不,我想识别ID的值,比如ID==2(第3行到第5行),其中性别的值不一致(例如,它们不是全部=M,也不是全部=F)。这会给你唯一的ID:
df%>%groupby(ID)%%>%filter(n_distinct(SEX)>1)%%>%distinct(ID)
。我相信还有很多其他方法可以做到这一点。
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
df[ave(df$SEX, df$ID, FUN = function(x) length(unique(x))) > 1, ]

  ID SEX
3  2   F
4  2   F
5  2   M