我的数据包含分组变量(“from”)和值(“number”):
from number
1 1
1 1
2 1
2 2
3 2
3 2
我希望对数据进行子集化,并选择具有两个或更多唯一值的组。在我的数据中,只有第2组有多个不同的“数字”,所以这是理想的结果:
from number
2 1
2 2
答案 0 :(得分:6)
有几种可能性,这是我最喜欢的
library(data.table)
setDT(df)[, if(+var(number)) .SD, by = from]
# from number
# 1: 2 1
# 2: 2 2
基本上,我们每组检查是否有任何差异,如果TRUE
,则返回组值
使用基数R,我会选择
df[as.logical(with(df, ave(number, from, FUN = var))), ]
# from number
# 3 2 1
# 4 2 2
修改:对于非数字数据,您可以针对uniqueN
的{{3}}尝试新的data.table
函数(或使用length(unique(number)) > 1
代替< / p>
setDT(df)[, if(uniqueN(number) > 1) .SD, by = from]
答案 1 :(得分:4)
你可以尝试
library(dplyr)
df1 %>%
group_by(from) %>%
filter(n_distinct(number)>1)
# from number
#1 2 1
#2 2 2
或使用base R
indx <- rowSums(!!table(df1))>1
subset(df1, from %in% names(indx)[indx])
# from number
#3 2 1
#4 2 2
或者
df1[with(df1, !ave(number, from, FUN=anyDuplicated)),]
# from number
#3 2 1
#4 2 2
答案 2 :(得分:1)
使用David共享的方差概念,但以dplyr方式执行:
library(dplyr)
df %>%
group_by(from) %>%
mutate(variance=var(number)) %>%
filter(variance!=0) %>%
select(from,number)
#Source: local data frame [2 x 2]
#Groups: from
#from number
#1 2 1
#2 2 2