R 找出具有相同名称的不同值的行

R 找出具有相同名称的不同值的行,r,R,我有一个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)) B 2 B 15 像这样的?这将搜索与多个值关联的名称,并输出每对{Name-value}的一个副本 df <- data.frame(Name = c("A", "A","A","B", "B", "C

我有一个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))
B  2
B  15

像这样的?这将搜索与多个值关联的名称,并输出每对{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

您可以使用
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
然后,要仅保留具有多个
值的
名称
,请在上面附加以下内容:

df %>%
  group_by(Name) %>%
  filter( n() > 1)
或:


基本R翻译-
df[使用(df,ave(Value,Name,FUN=function(x)length(unique(x)))>1),
您还可以利用
n_distinct
-
df%>%group_by(Name)%%>%mutate(nd=n_distinct(Value))%%过滤器(nd>1)
或者我应该说
df%>%group_by(Name)%%>%filter(n_distinct(Value)>%1)
更简单。这段代码救了我的命!非常感谢。
df %>%
  group_by(Name) %>%
  filter( n() > 1)
   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