删除具有少于三个独特观察的组
Remove groups with less than three unique observations
我想对我的数据框进行子集化,以仅保留在不同日期有 3 个或更多观测值的组。我想摆脱少于 3 个观察值的组,或者他们的观察值不是来自 3 个不同的日子。
这是一个示例数据集:
Group Day
1 1
1 3
1 5
1 5
2 2
2 2
2 4
2 4
3 1
3 2
3 3
4 1
4 5
因此对于上面的示例,组 1 和组 3 将被保留,组 2 和组 4 将从数据框中删除。
我希望这是有道理的,我想解决方案会很简单,但我无法解决(我是 R 的新手,而且想出解决此类问题的速度不是很快)。我想也许 diff 函数可以派上用场,但没有得到更多。
使用 data.table 你可以做:
library(data.table)
DT[, if(uniqueN(Day) >= 3) .SD, by = Group]
给出:
Group Day
1: 1 1
2: 1 3
3: 1 5
4: 1 5
5: 3 1
6: 3 2
7: 3 3
或 dplyr
:
library(dplyr)
DT %>%
group_by(Group) %>%
filter(n_distinct(Day) >= 3)
结果相同。
一个想法使用 dplyr
library(dplyr)
df %>%
group_by(Group) %>%
filter(length(unique(Day)) >= 3)
#Source: local data frame [7 x 2]
#Groups: Group [2]
# Group Day
# (int) (int)
#1 1 1
#2 1 3
#3 1 5
#4 1 5
#5 3 1
#6 3 2
#7 3 3
我们可以使用base R
i1 <- rowSums(table(df1)!=0)>=3
subset(df1, Group %in% names(i1)[i1])
# Group Day
#1 1 1
#2 1 3
#3 1 5
#4 1 5
#9 3 1
#10 3 2
#11 3 3
或者单行 base R
会是
df1[with(df1, as.logical(ave(Day, Group, FUN = function(x) length(unique(x)) >=3))),]
我想对我的数据框进行子集化,以仅保留在不同日期有 3 个或更多观测值的组。我想摆脱少于 3 个观察值的组,或者他们的观察值不是来自 3 个不同的日子。
这是一个示例数据集:
Group Day
1 1
1 3
1 5
1 5
2 2
2 2
2 4
2 4
3 1
3 2
3 3
4 1
4 5
因此对于上面的示例,组 1 和组 3 将被保留,组 2 和组 4 将从数据框中删除。
我希望这是有道理的,我想解决方案会很简单,但我无法解决(我是 R 的新手,而且想出解决此类问题的速度不是很快)。我想也许 diff 函数可以派上用场,但没有得到更多。
使用 data.table 你可以做:
library(data.table)
DT[, if(uniqueN(Day) >= 3) .SD, by = Group]
给出:
Group Day 1: 1 1 2: 1 3 3: 1 5 4: 1 5 5: 3 1 6: 3 2 7: 3 3
或 dplyr
:
library(dplyr)
DT %>%
group_by(Group) %>%
filter(n_distinct(Day) >= 3)
结果相同。
一个想法使用 dplyr
library(dplyr)
df %>%
group_by(Group) %>%
filter(length(unique(Day)) >= 3)
#Source: local data frame [7 x 2]
#Groups: Group [2]
# Group Day
# (int) (int)
#1 1 1
#2 1 3
#3 1 5
#4 1 5
#5 3 1
#6 3 2
#7 3 3
我们可以使用base R
i1 <- rowSums(table(df1)!=0)>=3
subset(df1, Group %in% names(i1)[i1])
# Group Day
#1 1 1
#2 1 3
#3 1 5
#4 1 5
#9 3 1
#10 3 2
#11 3 3
或者单行 base R
会是
df1[with(df1, as.logical(ave(Day, Group, FUN = function(x) length(unique(x)) >=3))),]