我有一个像这样的数据框
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列组合的数据框中使用,并且我无法使用相同的逻辑。请帮助解决一些如何解决这个问题的建议
答案 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),]