R 为特定变量筛选TIBLE,但保留不匹配的行并用NA/NULL填充

R 为特定变量筛选TIBLE,但保留不匹配的行并用NA/NULL填充,r,tidyverse,tidyr,R,Tidyverse,Tidyr,我有这个TIBLE,我想通过一个项目的所有ID对其进行过滤,但另外保留所有行并用NA或0填充这些行 库(TIBLE) tibble::tibble(项=c(“a”、“a”、“a”、“b”、“b”、“c”、“c”), id=c(“10”、“11”、“12”、“10”、“15”、“16”、“8”、“9”、“12”), val=c(25,27,31,24,38,39,12,14,39)) #一个tibble:9x3 项目id val 1 a 10 25 2 a 11 27 3 a 12 31 4 b

我有这个TIBLE,我想通过一个项目的所有ID对其进行过滤,但另外保留所有行并用NA或0填充这些行

库(TIBLE)
tibble::tibble(项=c(“a”、“a”、“a”、“b”、“b”、“c”、“c”),
id=c(“10”、“11”、“12”、“10”、“15”、“16”、“8”、“9”、“12”),
val=c(25,27,31,24,38,39,12,14,39))
#一个tibble:9x3
项目id val
1 a 10 25
2 a 11 27
3 a 12 31
4 b 10 24
5 b 15 38
6 b 16 39
7 c 8 12
8 c 9 14
9 c 12 39
例如,我想过滤项目a的所有ID(即
10、11、12
),我想要的TIBLE看起来像这样,我保留所有不匹配的行,并用
NA
填充
,用
0
填充

#一个tible:9 x 3
项目id val
1 a 10 25
2 a 11 27
3 a 12 31
4 b 10 24
5b钠0
6b钠0
7c-na0
8c-na0
9 c 12 39

您可以使用
replace
ifelse
-

library(dplyr)

keep <- c(10, 11, 12)

df %>%
  mutate(val = replace(val, !id %in% keep, 0), 
         id = replace(id, !id %in% keep, NA))

#  item  id      val
#  <chr> <chr> <dbl>
#1 a     10       25
#2 a     11       27
#3 a     12       31
#4 b     10       24
#5 b     NA        0
#6 b     NA        0
#7 c     NA        0
#8 c     NA        0
#9 c     12       39

您可以使用
replace
ifelse
-

library(dplyr)

keep <- c(10, 11, 12)

df %>%
  mutate(val = replace(val, !id %in% keep, 0), 
         id = replace(id, !id %in% keep, NA))

#  item  id      val
#  <chr> <chr> <dbl>
#1 a     10       25
#2 a     11       27
#3 a     12       31
#4 b     10       24
#5 b     NA        0
#6 b     NA        0
#7 c     NA        0
#8 c     NA        0
#9 c     12       39