gpt4 book ai didi

r - 是否有跨不同列的条件值的 R 函数?

转载 作者:行者123 更新时间:2023-12-05 01:51:59 25 4
gpt4 key购买 nike

假设您有一个如下所示的数据框:

df <- tibble(PatientID = c(1,2,3,4,5),
Treat1 = c("R", "O", "C", "O", "C"),
Treat2 = c("O", "R", "R", NA, "O"),
Treat3 = c("C", NA, "O", NA, "R"),
Treat4 = c("H", NA, "H", NA, "H"),
Treat5 = c("H", NA, NA, NA, "H"))

Treat 1:Treat5 是患者接受过的不同治疗。我希望创建一个新变量“Chemo”,其中 1 表示是,0 表示否,具体取决于患者是否接受过治疗“C”。

我一直在使用 if_else(),但由于我的实际数据集中有 10 个不同的处理变量,而且我想为每个处理创建这样一个列,我想知道我是否可以在不编写这么长的 if 语句的情况下做到这一点.有更简单的方法吗?

最佳答案

使用 if_any 遍历 starts_with 'Treat' 的列,创建一个逻辑向量 %in% - if_any 返回 TRUE/FALSE 如果所选的任何列的特定行具有“C”,逻辑将使用 +(或 作为.整数)

library(dplyr)
df <- df %>%
mutate(Chemo = +(if_any(starts_with("Treat"), ~ .x %in% "C")))

-输出

df
# A tibble: 5 × 7
PatientID Treat1 Treat2 Treat3 Treat4 Treat5 Chemo
<dbl> <chr> <chr> <chr> <chr> <chr> <int>
1 1 R O C H H 1
2 2 O R <NA> <NA> <NA> 0
3 3 C R O H <NA> 1
4 4 O <NA> <NA> <NA> <NA> 0
5 5 C O R H H 1

或者使用 base RrowSums

df$Chemo <- +(rowSums(df[startsWith(names(df), "Treat")] == "C", 
na.rm = TRUE) > 0)

关于r - 是否有跨不同列的条件值的 R 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71887744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com