Bla*_*ake 2 grouping r dataframe
我试图通过因子变量对data.frame进行分组,然后返回data.frame的行,这些行与每个组中仅发生一次的观察值相对应。例如,考虑以下数据:
x = matrix(c(1,1,2,2,2,3,4,4,5,4), nrow = 5, ncol = 2, byrow = F)
x = data.frame(x)
x
# X1 X2
# 1 1 3
# 2 1 4
# 3 2 4
# 4 2 5
# 5 2 4
Run Code Online (Sandbox Code Playgroud)
我想按第1列中的值对数据进行分组,然后返回一组中第2列中的值仅出现一次的行。在这里,该函数将返回第一,第二和第四行。
所需的输出
# X1 X2
# 1 1 3
# 2 1 4
# 4 2 5
Run Code Online (Sandbox Code Playgroud)
我希望将其应用于具有> 1mm行的数据集。
在基数R中,您可以尝试ave:
x[with(x, ave(X2, X1, X2, FUN = length)) == 1, ]
# X1 X2
# 1 1 3
# 2 1 4
# 4 2 5
Run Code Online (Sandbox Code Playgroud)
因为ave在有多个组和多个分组变量时伸缩性很差,所以您可能需要首先创建一个新组:
x[with(x, ave(X2, sprintf("%s__%s", X1, X2), FUN = length)) == 1, ]
Run Code Online (Sandbox Code Playgroud)
速度将根据数据的性质而变化很大。
您也可以尝试:
library(dplyr)
x %>%
group_by(X1, X2) %>%
filter(n() == 1)
# Source: local data frame [3 x 2]
# Groups: X1, X2 [3]
#
# X1 X2
# (dbl) (dbl)
# 1 1 3
# 2 1 4
# 3 2 5
Run Code Online (Sandbox Code Playgroud)