如何删除给定ID只有1个组合的行

时间:2016-07-06 20:16:39

标签: r dataframe count

我有一个像这样的数据框

  ID Measurement Value
1  A      Length   4.5
2  A     Breadth   6.6
3  A     Breadth   7.5
4  B     Breadth   3.3
5  B      Length   5.6

我想要的输出是

df_count <- length(unique(df$Measurement))
    if(df_count < 2)
      next

我想删除给定ID只有1个组合的行。

我执行类似这样的操作来删除数据框中只有1列具有1个唯一值的行。

XMLHttpRequest

我正在尝试将其扩展为在具有2列组合的数据框中使用,并且我无法使用相同的逻辑。请帮助解决一些如何解决这个问题的建议

4 个答案:

答案 0 :(得分:4)

基础R:将ave创建的逻辑值提供给i的{​​{1}}参数:

"["

在这种情况下,我认为基本解决方案已经占主导地位了#34;在data.table和dplyr解决方案的简单编程和可懂度方面。根据我的经验,情况并非如此。

答案 1 :(得分:3)

在dplyr中,它将是

library(dplyr)

df %>% group_by(ID) %>% filter(n_distinct(Measurement) > 1)
##       ID Measurement Value
##   <fctr>      <fctr> <dbl>
## 1      A      Length   4.5
## 2      A     Breadth   6.6
## 3      A     Breadth   7.5
## 4      B     Breadth   3.3
## 5      B      Length   5.6

答案 2 :(得分:3)

使用data.table

library(data.table)
DT <- data.table(df)
DT[, Count := length(unique(Measurement)), ID][Count > 1]

修改

另外,@ DavidArenburg提出了一个更好的单线:

setDT(df)[, if(uniqueN(Measurement) > 1) .SD, by = ID]

答案 3 :(得分:1)

另一种选择是使用anyDuplicated

df[with(df, ave(as.character(Measurement), ID, FUN = anyDuplicated)!=0),]