我的df看起来像
df <- data.frame(Name = c("A", "A","A","B", "B", "C", "D", "E", "E"),
Value = c(1, 1, 1, 2, 15, 3, 4, 5, 5))
基本上,A是1,B是2,C是3,依此类推。 但是,如您所见,B有“2”和“15”。“15”是错误的值,它不应该在这里。
我想找出Value在同一名称中不匹配的行。 理想的输出看起来像
B 2
B 15
答案 0 :(得分:1)
您可以使用tidyverse
等功能:
df %>%
group_by(Name, Value) %>%
unique()
,并提供:
Name Value
1 A 1
2 B 2
3 B 15
4 C 3
5 D 4
6 E 5
然后,要仅保留Name
多个Value
,请在上面添加:
df %>%
group_by(Name) %>%
filter( n() > 1)
答案 1 :(得分:0)
这样的东西?这将搜索与多个值相关联的名称,并输出每对{Name - Value}的一个副本。
df <- data.frame(Name = c("A", "A","A","B", "B", "C", "D", "E", "E"),
Value = c(1, 1, 1, 2, 15, 3, 4, 5, 5))
res <- do.call(rbind, lapply(unique(df$Name), (function(i){
if (length(unique(df[df$Name == i,]$Value)) > 1 ) {
out <- df[df$Name == i,]
out[!duplicated(out$Value), ]
}
})))
res
按预期结果
Name Value
4 B 2
5 B 15
答案 2 :(得分:0)
Filter(function(x)nrow(unique(x))!=1,split(df,df$Name))
$B
Name Value
4 B 2
5 B 15
或者:
Reduce(rbind,by(df,df$Name,function(x) if(nrow(unique(x))>1) x))
Name Value
4 B 2
5 B 15