【发布时间】:2017-03-08 19:31:34
【问题描述】:
我看到了类似的问题,但无法应用它们来解决我的问题。我想要一个函数来过滤少于 3 个观察值的组。因为我想要几个数据帧,所以我需要一个函数。我用 dplyr 和合并完成了它,但我想要一个更好的代码,只使用 dplyr 或数据表。
data <- read.table(text="
col1 col2
group1 some
group1 some2
group1 some3
group2 some
group2 some2",header=TRUE,fill=TRUE,stringsAsFactors=FALSE)
filter3 <- function(df, colgroup1) {
df %>%
group_by_(colgroup1) %>%
summarise_(Count = ~n()) #%>%
}
great3<-function(x, col){
x[x[,col] >=3 ,]
}
allfiltered<-function(df,colgroup1){
counts<-filter3(df,colgroup1)
final<-great3(counts,"Count")
merge(df,final, by=colgroup1)}
allfiltered(data,"col1")
#expected, count column dispensable, (function for 1 df or list of dfs wanted)
col1 col2 Count
1 group1 some 3
2 group1 some2 3
3 group1 some3 3
【问题讨论】:
-
关于data.table,见stackoverflow.com/q/36869784本质上,
f = function(d, col, n = 3) setDT(d)[, if (.N >= n) .SD, by=col]可以像f(data, "col1")一样使用,也可以stackoverflow.com/q/39085450
标签: r data.table dplyr