R 按不同的因子水平筛选不同的组
我有一个数据框,如下所示R 按不同的因子水平筛选不同的组,r,dplyr,tibble,R,Dplyr,Tibble,我有一个数据框,如下所示 set.seed(5) df <- tibble(x=factor(rep(c(LETTERS,letters[1:12]),10)), y=sample(seq(1993,2000), 380, replace = T),z = sample(1:12, 380, replace = T)) set.seed(5) df=1993对于A级,y>=1994对于B级,y>=1995对于C级,y>=1996对于D级,y>=1997对于E级,y>=1993对于F级,y
set.seed(5)
df <- tibble(x=factor(rep(c(LETTERS,letters[1:12]),10)), y=sample(seq(1993,2000), 380, replace = T),z = sample(1:12, 380, replace = T))
set.seed(5)
df=1993
对于A级,y>=1994
对于B级,y>=1995
对于C级,y>=1996
对于D级,y>=1997
对于E级,y>=1993
对于F级,y>=1994
对于G级,y>=1995
对于级别a和剩余级别y>=2000
在第x列中使用dplyr
动词?您可以使用带括号的布尔值来完成此操作:
library(dplyr)
df %>%
filter((x == "A" & y >= 1993) | (x == "B" & y >= 1994) | (x == "C" & y >= 1995))
x y z
<fct> <dbl> <int>
1 A 1993 2
2 A 1994 3
3 A 1995 4
4 B 1994 7
5 B 1995 8
6 C 1995 12
库(dplyr)
df%>%
过滤器(x==“A”&y>=1993)|(x==“B”&y>=1994)|(x==“C”&y>=1995))
x y z
1 A 1993 2
2 A 1994 3
3 A 1995 4
4 B 1994 7
5 B 1995 8
6 C 1995 12
带有dplyr
:
df %>%
filter(ifelse(x=="A",y>=1993,ifelse(x=="B",
y>=1994,y>=1995)))
# A tibble: 6 x 3
x y z
<fct> <dbl> <int>
1 A 1993 2
2 A 1994 3
3 A 1995 4
4 B 1994 7
5 B 1995 8
6 C 1995 12
编辑:使用更新的数据和条件:
set.seed(520)
df %>%
filter(case_when(x %in% c("A","F") ~ y>=1993,
x %in% c("C","a") ~ y>=1995,
x=="D" ~ y>=1996,
x=="G"~ y>=1994,
x=="E" ~ y>= 1997,
TRUE ~ y>=2000))
# A tibble: 90 x 3
x y z
<fct> <int> <int>
1 A 1999 3
2 C 1998 5
3 F 1993 8
4 G 1997 7
5 H 2000 5
6 K 2000 2
7 P 2000 2
8 V 2000 9
9 W 2000 1
10 g 2000 7
# … with 80 more rows
set.seed(520)
df%>%
过滤器(当(x%在%c(“A”、“F”)~y>=1993时,
x%以%c(“c”,“a”)表示,y>=1995年,
x==“D”~y>=1996,
x==“G”~y>=1994年,
x==“E”~y>=1997,
真~y>=2000)
#一个tibble:90x3
x y z
1 A 1999 3
2 C 1998 5
3 F 1993 8
4 G 1997 7
5小时2000 5
6K 20002
7 P 2000 2
8 V 2000 9
9 W 2000 1
10 g 2000 7
#…还有80行
备注::
数据:种子设定为520时的状态
我觉得这种方法有点过于手工。也许有更好的办法
他们总是只有三个级别吗?不,我有更多级别。实际上,我有38个级别的x,我想根据yth的不同值进行过滤,从而使解决方案有所不同。你不能只过滤38层。您可以添加带有dput(head(df,n))
和更多条件的样本数据吗?我现在编辑了38个级别,包含更多条件。请看一下,我有A和A,我认为是不同的级别。
set.seed(520)
df %>%
filter(case_when(x %in% c("A","F") ~ y>=1993,
x %in% c("C","a") ~ y>=1995,
x=="D" ~ y>=1996,
x=="G"~ y>=1994,
x=="E" ~ y>= 1997,
TRUE ~ y>=2000))
# A tibble: 90 x 3
x y z
<fct> <int> <int>
1 A 1999 3
2 C 1998 5
3 F 1993 8
4 G 1997 7
5 H 2000 5
6 K 2000 2
7 P 2000 2
8 V 2000 9
9 W 2000 1
10 g 2000 7
# … with 80 more rows