R 找出具有相同名称的不同值的行
我有一个df看起来像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 <- 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