R 删除具有少于三个唯一观察值的组
我想将我的数据框子集,只保留在不同日期有3次或更多观察的组。我想去掉那些观察次数少于3次的小组,或者他们的观察次数不是3天的 以下是一个示例数据集:R 删除具有少于三个唯一观察值的组,r,subset,r-faq,data.table,R,Subset,R Faq,Data.table,我想将我的数据框子集,只保留在不同日期有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,并从数据帧中删除组
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函数可能会派上用场,但没能走得更远。有了它,您可以:
library(data.table)
DT[, if(uniqueN(Day) >= 3) .SD, by = Group]
其中:
或使用dplyr
:
library(dplyr)
DT %>%
group_by(Group) %>%
filter(n_distinct(Day) >= 3)
这会给出相同的结果。使用,您可以执行以下操作:
library(data.table)
DT[, if(uniqueN(Day) >= 3) .SD, by = Group]
其中:
或使用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
使用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
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
尝试
df[df$Group%以%as.numeric(名称(tapply(df$Day,df$Group,函数(x)长度(唯一(x))>=3)),]
@Jaap这是怎么回事r-faq
?我不能把所有的事情都当作r-faq。当然,还有一些更一般、访问量更大的问题没有标注r-faq。你能解释一下吗?谢谢。请尝试df[df$Group%以%as.numeric形式显示(名称(使用(df$Day,df$Group,函数(x)长度(唯一(x))>=3)),]
@Jaap这是怎么回事r-faq
?我不能把所有的事情都当作r-faq。当然,还有一些更一般、访问量更大的问题没有标注r-faq。你能解释一下吗?谢谢。不用length(unique(Day))
你可以n_distinct(Day)
Nice!谢谢@Arun@ProcrastinatusMaximus,我没有看到您使用dplyr
解决方案进行了更新。我添加了unique(length))
approach anyways.np,有几个选项总是好的;-)(顺便说一句:你的筛选语句中的,
是不需要的,我已经冒昧地删除了;希望你不介意)谢谢@拖拉Maximus:)而不是length(unique(Day))
你可以n_distinct(Day)
很好!谢谢@Arun@ProcrastinatusMaximus,我没有看到您使用dplyr
解决方案进行了更新。我添加了unique(length))
approach anyways.np,有几个选项总是好的;-)(顺便说一句:过滤语句中的,
是不需要的,我已经冒昧地删除了;希望你不介意)谢谢@prolautiatusMaximus:)