簡體   English   中英

根據多個條件改變多列

[英]Mutate multiple columns based on multiple conditions

我正在嘗試根據以下幾個條件改變數據框中的多個列。

if a value >= 0.25, value = 1
value <= 0.25, value = 1
value <= 1.2, value = 2
value >= -1.2, value = -2
value <= 0.25 & value >=-0.25, value = 0

數據:

structure(list(col = c("a", "b", "c", "d", "e"), col2 = c(0.023, 
0.41, 0.032, -0.58, -2.6), col3 = c(-0.123, 0.551, -0.032, 0.58, 
-4.6), col4 = c(-0.23, 0.1, 0.25, 1.858, -6.6)), class = "data.frame", row.names = c(NA, 
-5L))

我有超過 75 列,所以我不能對單個列使用傳統的 case_when。 我真的希望有人能提供幫助。

我們可以使用mutateacross :與 @PaulS+1 的區別在於排除第一列並使用.names參數。

library(dplyr)


df %>% 
  mutate(across(-col, ~case_when(
    . >= 0.25 ~ 1,
    . <= 0.25 ~ 1, 
    . <= 1.2 ~ 2, 
    . >= -1.2 ~ -2,
    . <= 0.25 & . >=-0.25 ~ 0 
  ), .names = "new_{.col}"))
  col   col2   col3   col4 new_col2 new_col3 new_col4
1   a  0.023 -0.123 -0.230        1        1        1
2   b  0.410  0.551  0.100        1        1        1
3   c  0.032 -0.032  0.250        1        1        1
4   d -0.580  0.580  1.858        1        1        1
5   e -2.600 -4.600 -6.600        1        1        1

一個可能的解決方案:

library(tidyverse)

df <- structure(list(col = c("a", "b", "c", "d", "e"), col2 = c(0.023,  0.41, 0.032, -0.58, -2.6), col3 = c(-0.123, 0.551, -0.032, 0.58,  -4.6), col4 = c(-0.23, 0.1, 0.25, 1.858, -6.6)), class = "data.frame", row.names = c(NA,  -5L))

df %>% 
  mutate(across(matches("\\d$"), ~ case_when(.x >= 0.25 ~ 1,
                                             .x <= 0.25 ~ 1,
                                             .x <= 1.2 ~ 2,
                                             .x >= -1.2 ~ -2,
                                             .x <= 0.25 & .x >=-0.25 ~ 0)))
#>   col col2 col3 col4
#> 1   a    1    1    1
#> 2   b    1    1    1
#> 3   c    1    1    1
#> 4   d    1    1    1
#> 5   e    1    1    1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM