我有以下数据集:
Class Value
A 5.4
A 5.4
A 5.4
B 3.6
B 2.7
C 4.02
C 4.02
C 4.02
D 6.33
D 6.33
我想要的是仅检索具有相似值的类,在这种情况下,该类应返回类A
和D
,但不返回类B
,因为它有两个不同的值。
为此,我尝试了以下操作:
sub <- dataset[as.logical(ave(dataset$Value, dataset$Class, FUN = function(x) all(x==x))), ]
但这会返回我不想要的所有类。
有人可以帮我吗?
答案 0 :(得分:3)
使用aggregate
和数字unique
(length(unique)
)
filterdf=aggregate(Value ~ Class, df, function(x) length(unique(x)))
df[df$Class%in%filterdf[filterdf$Value==1,]$Class,]
Class Value
1 A 5.40
2 A 5.40
3 A 5.40
6 C 4.02
7 C 4.02
8 C 4.02
9 D 6.33
10 D 6.33
马库斯的替代品
idx <- with(df, ave(Value, Class, FUN = function(x) length(unique(x))) == 1)
df[idx, ]
答案 1 :(得分:0)
使用tidyverse
,您可以执行以下操作:
df %>%
group_by(Class) %>%
filter(all(Value == first(Value)))
或者:
df %>%
group_by(Class) %>%
filter(n_distinct(Value) == 1)
或者:
df %>%
group_by(Class) %>%
filter(all(Value %/% first(Value) != 0))
或者:
df %>%
group_by(Class, Value) %>%
mutate(temp = seq_along(Value)) %>%
group_by(Class) %>%
filter(sum(temp[temp == 1]) == 1) %>%
select(-temp)
或与@ W-B中的帖子基本相同:
df %>%
group_by(Class) %>%
filter(length(unique(Value)) == 1)