[英]How to change values across multiple columns using a value conversion dataframe in R with dplyr
[英]How to change values in multiple columns using the across function in R?
我有一個數據框,我想在其中遍歷所有以_qc
結尾的列,如果值為“4”,則將 NA 設置為沒有_qc
后綴的相應列。
例如,如果名為chla_adjusted_qc == 4
的列的值, chla_adjusted
的值設置為 NA。
library(tidyverse)
df <- tibble(
chla_adjusted = c(100, 2),
chla_adjusted_qc = c("4", "1"),
bbp_adjusted = c(0.1, 9999),
bbp_adjusted_qc = c("2", "4")
)
df
#> # A tibble: 2 × 4
#> chla_adjusted chla_adjusted_qc bbp_adjusted bbp_adjusted_qc
#> <dbl> <chr> <dbl> <chr>
#> 1 100 4 0.1 2
#> 2 2 1 9999 4
所需的輸出將是
tibble(
chla_adjusted = c(NA, 2),
chla_adjusted_qc = c("4", "1"),
bbp_adjusted = c(0.1, NA),
bbp_adjusted_qc = c("2", "4")
)
#> # A tibble: 2 × 4
#> chla_adjusted chla_adjusted_qc bbp_adjusted bbp_adjusted_qc
#> <dbl> <chr> <dbl> <chr>
#> 1 NA 4 0.1 2
#> 2 2 1 NA 4
到目前為止我所做的是獲取當前列名並找到我要在其中設置 NA 值的相應列。
df |>
mutate(across(ends_with("_qc"), \(var) {
# If var is chla_adjusted_qc, then lets modify the value in chla_adjusted
col <- str_remove(cur_column(), "_qc")
# if (var == "4") {
# # What to do here?
# }
}))
#> # A tibble: 2 × 4
#> chla_adjusted chla_adjusted_qc bbp_adjusted bbp_adjusted_qc
#> <dbl> <chr> <dbl> <chr>
#> 1 100 chla_adjusted 0.1 bbp_adjusted
#> 2 2 chla_adjusted 9999 bbp_adjusted
謝謝你。
創建於 2022-12-20,使用reprex v2.0.2
df %>%
mutate(across(ends_with("_qc"),
~ replace(cur_data()[[ sub("_qc$", "", cur_column()) ]], . == 4L, NA),
.names = "{sub('_qc$', '', .col)}"))
# # A tibble: 2 × 4
# chla_adjusted chla_adjusted_qc bbp_adjusted bbp_adjusted_qc
# <dbl> <chr> <dbl> <chr>
# 1 NA 4 0.1 2
# 2 2 1 NA 4
基礎 R 解決方案:
for(v in grep("_qc$",names(df), value=TRUE)){
df[[sub("_qc$","",v)]][df[[v]]==4] <- NA
}
> df
# A tibble: 2 × 4
chla_adjusted chla_adjusted_qc bbp_adjusted bbp_adjusted_qc
<dbl> <chr> <dbl> <chr>
1 NA 4 0.1 2
2 2 1 NA 4
>
我們可以使用across2
中的dplyover
library(dplyover)
df %>%
mutate(across2(ends_with('adjusted'), ends_with('_qc'),
~ case_when(.y !=4 ~ .x ), .names = "{xcol}"))
-輸出
# A tibble: 2 × 4
chla_adjusted chla_adjusted_qc bbp_adjusted bbp_adjusted_qc
<dbl> <chr> <dbl> <chr>
1 NA 4 0.1 2
2 2 1 NA 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.