我有带有分组变量(“来自”)和值(“数字”)的数据:
from number
1 1
1 1
2 1
2 2
3 2
3 2
我想对数据进行子集化并选择具有两个或多个唯一值的组。在我的数据中,只有第 2 组有多个不同的“数字”,所以这是期望的结果:
from number
2 1
2 2
几种可能性,这是我最喜欢的
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
函数来实现 data.table
的 开发版本(或使用
length(unique(number)) > 1
代替
setDT(df)[, if(uniqueN(number) > 1) .SD, by = from]
你可以试试
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
使用 David 共享的方差概念,但以 dplyr 方式进行:
library(dplyr)
df %>%
group_by(from) %>%
filter(var(number) != 0)
#Source: local data frame [2 x 2]
#Groups: from
#from number
#1 2 1
#2 2 2