gpt4 book ai didi

r - 将列值设置为跨列满足条件的第一个值

转载 作者:行者123 更新时间:2023-12-02 01:24:56 24 4
gpt4 key购买 nike

我有一个数据框,其中的列以“dx”开头。我想创建另一个名为 primary 的列。如果以“dx”开头的所有列中的值为 “I629”NA,我希望 primary 的值为“未指定”。否则,我希望它成为第一个非“I629”值。

我想要的输出:

dx1  dx2  dx3 dx4 dx5 primary
I629 NA NA NA NA Unspecified
S065 NA NA NA NA S065
I629 S066 NA NA NA S066
I629 I629 NA NA NA Unspecified

最佳答案

tidyverse 解决方案:创建一个辅助数据框,其中 "I629"替换为 NA全部Dx列;使用dplyr::coalesce()取第一个非NA值(或 "Unspecified" 如果全部为 NA );最后绑定(bind)新的primary列到您的原始数据框。

library(dplyr)
library(tidyr)

primary_dx <- dat %>%
mutate(
across(starts_with("dx"), \(col) na_if(col, "I629")),
primary = coalesce(!!!select(., starts_with("dx")), "Unspecified")
) %>%
select(primary)

bind_cols(dat, primary_dx)
# A tibble: 4 × 6
dx1 dx2 dx3 dx4 dx5 primary
<chr> <chr> <lgl> <lgl> <lgl> <chr>
1 I629 NA NA NA NA Unspecified
2 S065 NA NA NA NA S065
3 I629 S066 NA NA NA S066
4 I629 I629 NA NA NA Unspecified

关于r - 将列值设置为跨列满足条件的第一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74945009/

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