R语言 有没有办法告诉case_when类似于“否则,保持值不变”?[duplicate]

amrnrhlw  于 2023-02-10  发布在  其他
关注(0)|答案(2)|浏览(142)
    • 此问题在此处已有答案**:

Keep value if not in case_when statement(2个答案)
7天前关闭。
在一项调查中,我有两个向量,一个包含受访者对问题的回答(包括NA),另一个是特定NA代码的哑元(即,对于具有特定NA值的所有受访者,如"不知道"或"不想说",该值为1)。
它可能看起来像这样。

a <- c(0, 1, 2, 3, 4, NA, NA, 7)
b <- c(0, 0, 0, 0, 0, 0, 1, 0)

现在我想修改a,使它保持所有的观测值,但在b = 1时被赋一个不同的值(比如99)。
最终结果应该如下所示。

> a
[1]  0  1  2  3  4 NA 99  7

我可以用变通的解决方案来达到这个结果,但如果能知道是否有一种方法可以直接到达那里,那就太好了。

q0qdq0h2

q0qdq0h21#

使用dplyr的一种方法:

library(dplyr)

a <- c(0, 1, 2, 3, 4, NA, NA, 7)
b <- c(0, 0, 0, 0, 0, 0, 1, 0)

dat <- 
  tibble(
    A = a,
    B = b
  ) 

dat2 <- 
  dat %>% 
  mutate(
    A = if_else(B == 1, 99, A)
  )

或者一个非常简单的直接方式a[b==1] = 99

iyfjxgzm

iyfjxgzm2#

在两个向量具有相同长度的假设下,你可以仅仅基于b创建logicals的“索引”向量,并且使用它来索引a的元素以用于值分配

b.index <- b == 1
a[b.index] = 99 
# or in one line
a[b == 1] = 99 
a
[1]  0  1  2  3  4 NA 99  7

相关问题