我有一组包含几个变量的数据。其中一个变量 - factorial包含组的名称 - A,B,C等。其余变量是数字。
> data1
Group Value
1 A 23
2 A 25
3 B 1
4 C 15
5 C 11
6 C 14
7 B 3
8 B 4
9 B 2
10 C 19
对于进一步的统计计算,我想从数据集中排除包含特定组(例如,X)的行,条件是该组在数据帧中找到n次(例如,少于2次) )。
之前我见过的材料主要涉及删除具有特定值的行,并且与数据帧中组(因子)的出现频率无关。也许我错了?遗憾!
删除"手册"中的特定行模式,我使用以下代码:
data1 <- as.data.frame(
lapply(subset(data1, !Group=="A"),
function(x) if(is.factor(x)) factor(x) else x
)
)
我想自动执行此过程,并排除预定发生的所有级别因素(组):
> data1
Group Value
1 B 1
2 C 15
3 C 11
4 C 14
5 B 3
6 B 4
7 B 2
8 C 19
加成
先生。 &#39; Akrun&#39;提出了使用以下代码的想法:
tbl <- table(data1$Group)
data1 <- subset(data1, Group %in% names(tbl)[tbl>2])
这就是你所需要的!我为此感谢他! 然而,rezltate因子水平保持不变。为了纠正这个问题,我被迫使用记录:
data1$Group = factor(data1$Group)
当然有考虑到这个案例的现成解决方案吗?
答案 0 :(得分:2)
我们可以使用data.table
。转换&#39; data.frame&#39;到&#39; data.table&#39; (setDT(data1)
),按&#39;分组&#39;,if
行数大于2(.N >2
),我们得到Data.table的子集({ {1}})。
.SD
或者使用library(data.table)
setDT(data1)[, if(.N >2) .SD, by = Group]
,按照&#39;分组&#39;,dplyr
将有正确(filter
)的群组分组为大于2。
n()
或者使用library(dplyr)
data1 %>%
group_by(Group) %>%
filter(n() > 2)
,我们会得到&#39; Group&#39;的频率。 <{1}}中的base R
和table
%in%
来保留群组。
subset