r - 变异、交叉和 case_when

标签 r dplyr case-when across

我在让 mutate、cross 和 case_when 正常运行时遇到了一些麻烦,我在这里重新创建了一个简单版本的问题:

a <- c(1:10)
b <- c(2:11)
c <- c(3:12)

test <- tibble(a, b, c)

# A tibble: 10 x 3
       a     b     c
   <int> <int> <int>
 1     1     2     3
 2     2     3     4
 3     3     4     5
 4     4     5     6
 5     5     6     7
 6     6     7     8
 7     7     8     9
 8     8     9    10
 9     9    10    11
10    10    11    12
我的目标是用 4 替换所有 3,并保持其他所有内容相同。我有以下代码:
test_1 <- 
  test %>% 
  mutate(across(a:c, ~ case_when(. == 3 ~ 4)))

# A tibble: 10 x 3
       a     b     c
   <dbl> <dbl> <dbl>
 1    NA    NA     4
 2    NA     4    NA
 3     4    NA    NA
 4    NA    NA    NA
 5    NA    NA    NA
 6    NA    NA    NA
 7    NA    NA    NA
 8    NA    NA    NA
 9    NA    NA    NA
10    NA    NA    NA
它很接近,但我得到了 NA 值,我想在原始 tibble 中保持该值。 如何使用跨结构的 mutate 维护原始值?
先感谢您!

最佳答案

那这个呢?

> test %>%
+   mutate(across(a:c, ~ case_when(. == 3 ~ 4, TRUE ~ 1 * (.))))
# A tibble: 10 x 3
       a     b     c
   <dbl> <dbl> <dbl>
 1     1     2     4
 2     2     4     4
 3     4     4     5
 4     4     5     6
 5     5     6     7
 6     6     7     8
 7     7     8     9
 8     8     9    10
 9     9    10    11
10    10    11    12
或者
> test %>%
+   replace(. == 3, 4)
# A tibble: 10 x 3
       a     b     c
   <int> <int> <int>
 1     1     2     4
 2     2     4     4
 3     4     4     5
 4     4     5     6
 5     5     6     7
 6     6     7     8
 7     7     8     9
 8     8     9    10
 9     9    10    11
10    10    11    12

关于r - 变异、交叉和 case_when,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65756153/

相关文章:

r - 如何将 "Year"、 "Day of the Year"和 "Hour"列合并到 R 中的 DateTime?

r - 创建一系列变量,其名称基于函数参数

r - 以半 reshape /半聚合方式清理 data.frame

sql - 使用 SQL 查询对计数进行排名

mysql - SQL ORDER 按列加辅助列有条件

r - 从现有数据框或数据表创建多个虚拟对象

r - 从 R 中的频率表创建一个包含单独试验的表(表函数的逆)

r - 如何将数据帧 A 中的每一列重复除以数据帧 B 中同一列的中位数?

r - dplyr:向组内的重复值添加抖动

sql - CASE WHEN 与 OR