我见过类似的问题,但无法解决我的问题。我想要一个函数来过滤少于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);
答案 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中,我们可以使用split
,Filter
和rbind
:
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