[英]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。 我真的希望有人能提供幫助。
我們可以使用mutate
和across
:與 @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.