R 删除数据帧中不常用的行
假设我有一个非常简单的数据框:R 删除数据帧中不常用的行,r,dataframe,frequency,R,Dataframe,Frequency,假设我有一个非常简单的数据框: a <- rep(5,30) b <- rep(4,80) d <- rep(7,55) df <- data.frame(Column = c(a,b,d)) a我们创建一个频率表,然后根据“列”中值的“计数”创建子集 tbl <- table(df$Column) >=60 subset(df, Column %in% names(tbl)[tbl]) 或者我们使用data.table library(data.ta
a <- rep(5,30)
b <- rep(4,80)
d <- rep(7,55)
df <- data.frame(Column = c(a,b,d))
a我们创建一个频率表
,然后根据“列”中值的“计数”创建子集
tbl <- table(df$Column) >=60
subset(df, Column %in% names(tbl)[tbl])
或者我们使用
data.table
library(data.table)
setDT(df)[, .SD[.N >= 60], Column]
library(data.table)
setDT(df)
df[Column %in% df[, .N, by = Column][N >= 60, Column]]
或者另一个带有数据的选项。表是.I
setDT(df)[df[, .I[.N >=60], Column]$V1]
使用dplyr
的解决方案
library(dplyr)
df2 <- df %>%
group_by(Column) %>%
filter(n() >= 60)
库(dplyr)
df2%
分组依据(列)%>%
过滤器(n()>=60)
或者是来自BaseR的解决方案
uniqueID <- unique(df$Column)
targetID <- sapply(split(df, df$Column), function(x) nrow(x) >= 60)
df2 <- df[df$Column %in% uniqueID[targetID], , drop = FALSE]
uniqueID使用data.table
library(data.table)
setDT(df)[, .SD[.N >= 60], Column]
library(data.table)
setDT(df)
df[Column %in% df[, .N, by = Column][N >= 60, Column]]
还有一个变量要回答,它使用联接而不是%
%中的%:
library(data.table)
setDT(df)
df[df[, .N, by = Column][N >= 60, .(Column)], on = "Column"]
有什么理由让这些数据保持为单独的行,而不是按每个值折叠成一行(带有“count”列)?这一点很好,但事实上,我需要以这种方式聚合数据