让数据帧是:一个数据帧R的条件子集
set.seed(123)
df<-data.frame(name=sample(LETTERS,260,replace=TRUE),
hobby=rep(c("outdoor","indoor"),260),chess=rnorm(1:10))
和我将使用从DF提取条件是:
df_cond<-df %>% group_by(name,hobby) %>%
summarize(count=n()) %>%
mutate(sum.var=sum(count),sum.name=length(name)) %>%
filter(sum.name==2) %>%
mutate(min.var=min(count)) %>%
mutate(use=ifelse(min.var==count,"yes","no")) %>%
filter(grepl("yes",use))
我想随机提取的行从df
与df_cond
(df
的其余部分)中的(名称,爱好,计数)组合相对应。我在结合%in%
和sample
时遇到了一些问题。感谢您的任何线索!
编辑:例如:
head(df_cond)
name hobby count sum.var sum.name min.var use
<fctr> <fctr> <int> <int> <int> <int> <chr>
1 A indoor 2 6 2 2 yes
2 B indoor 8 16 2 8 yes
3 B outdoor 8 16 2 8 yes
4 C outdoor 6 14 2 6 yes
5 D indoor 10 24 2 10 yes
6 E outdoor 8 18 2 8 yes
使用上述数据帧,我想随机df
提取2行(=计数)与组合A +室内(ROW1) 8行与组合B +室内(第2排)从df
....等等。
结合@denrous和@Jacob的答案来获得我所需要的。像这样:如果
m2<-df_cond %>%
mutate(data = map2(name, hobby, function(x, y) {df %>% filter(name == x, hobby == y)})) %>%
ungroup() %>%
select(data) %>%
unnest()
test<-m2 %>%
group_by(name,hobby) %>%
summarize(num.levels=length(unique(hobby))) %>%
ungroup() %>%
group_by(name) %>%
summarize(total_levels=sum(num.levels)) %>%
filter(total_levels>1)
fin<-semi_join(m2,test)
太棒了!需要 – thisisrg
这不会让我满足我需要的,但足够接近。谢谢!稍后会发布最终解决方案。 – thisisrg