过滤内部函数的数据帧

时间:2017-03-08 19:31:35

标签: r data.table dplyr

我见过类似的问题,但无法解决我的问题。我想要一个函数来过滤少于3个观察值的组。正如我想要的几个数据帧,我需要一个功能。我用dplyr和merge做了,但我想要一个只使用dplyr或datatable的更好的代码。

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var platform_browser_dynamic_1 = require("@angular/platform-browser-dynamic");
var app_module_1 = require("./app.module");
platform_browser_dynamic_1.platformBrowserDynamic().bootstrapModule(app_module_1.AppModule);

2 个答案:

答案 0 :(得分:2)

您可以使用group_by %>% filter,另请参阅?n()了解相关示例:

data %>% group_by(col1) %>% filter(n() >= 3)

#Source: local data frame [3 x 2]
#Groups: col1 [1]

#    col1  col2
#   <chr> <chr>
#1 group1  some
#2 group1 some2
#3 group1 some3

将其包装在一个函数中:

allfiltered <- function(data, colgroup1) { 
    data %>% 
        group_by_(.dots = colgroup1) %>% 
        filter(n() >= 3) 
}

答案 1 :(得分:1)

在基数R中,我们可以使用splitFilterrbind

allfiltered <- function(df, colGroup) {

    d <- split(df, as.factor(df[, colGroup]))

    l <- Filter(function(l) nrow(l) >= 3, d)

    do.call(rbind, l)
}

这会将data.frame拆分为list data.frame个,然后过滤满足条件的元素,最后将列表清除:

allfiltered(data, 'col1')
# $group1
#    col1  col2
# 1 group1  some
# 2 group1 some2
# 3 group1 some3