基于条件对数据帧进行分组并返回整个分组数据帧

时间:2015-12-29 08:33:16

标签: r

我们说我有以下数据框。第一列是INPUT,其值为4000,4000,3000,2000,2000,2000,2000等。第二列是具有值的组,例如-1,1,2,3,3,3,3 。 分组已基于INPUT完成。 例如:INPUT IS: -

INPUT     group
4000       1
4000       1
2000       2
3000       3
2000       4
2000       4
2000       4

输出: - 返回具有最大重复组值的整个data.frame。

INPUT     group
2000        4
2000        4
2000        4

我的数据框有10,0000条记录和70条属性。

3 个答案:

答案 0 :(得分:2)

我们可以使用data.table。我们转换了' data.frame'到' data.table' (setDT(df1),按照'组'将nrow分组,并在' N'中使用max值对行进行分组。

library(data.table)
setDT(df1)[, N:= .N, group][N==max(N)][, N:= NULL]
#    INPUT group
#1:  2000     4
#2:  2000     4
#3:  2000     4

答案 1 :(得分:2)

您可以尝试使用table功能,然后使用which.max找到最大重复值

df[df$group == which.max(table(df$group)), ]

#   INPUT group
#5  2000     4
#6  2000     4
#7  2000     4

根据@ David使用tabulate代替table的评论,这将是有用的,因为它是一个大型数据集

df[df$group == which.max(tabulate(df$group)), ]

刚刚对此数据集本身进行了一次小比较

library(microbenchmark)
microbenchmark(
tabulate = df[df$group == which.max(tabulate(df$group)), ],
table = df[df$group == which.max(table(df$group)), ]
)

# Unit: microseconds
# expr       min       lq      mean    median       uq     max   neval
# tabulate  46.871  51.1475  56.94295  53.714  62.4375  92.715    100
# table     184.747 192.4440 211.37036 203.905 216.3925 455.023   100

答案 2 :(得分:1)

你也可以使用基地R. 首先计算由INPUT变量分层的每个组变量的计数

d$count <- ave(d$INPUT, d$group,  FUN = length)

返回具有最大重复组值的数据。

d[ d$count == max(d$count),  ]