gpt4 book ai didi

r - Ifelse 在 dplyr 内需要更长的时间来执行

转载 作者:行者123 更新时间:2023-12-03 21:34:45 25 4
gpt4 key购买 nike

我正在处理医疗 claim 数据,数据文件如下所示

claim_id  status
abc123 P
abc123 R
xyz374 P
xyz386 R

我想创建一个新列作为标志,该列基本上按 Claim_id 分组,并且如果同一 Claim_id 的状态同时包含“P”和“R”。标志列应包含"is"

claim_id  status  flag
abc123 P Yes
abc123 R Yes
xyz374 P No
xyz386 R No

我的解决方案是使用 dplyr :-

data <-data1 %>% 
group_by(claim_id)%>%
mutate(flag = ifelse(any(status == "P" | status == "R"),
"Yes",
as.character(status)))

此方法需要较长时间,并且还会在标志列中将所有行标记为"is"。

最佳答案

试试这个:

data1 <- data1 %>% group_by(claim_id) %>% mutate(flag = (n_distinct(status) == 2))

这假设这是状态字段仅有的两个可能值。如果情况并非如此,您将需要执行以下操作:

data1 <- data1 %>% group_by(claim_id) %>% mutate(flag = (('P' %in% status) & ('R' %in% status)))

你也可以这样做

data1 %>% 
group_by(claim_id) %>%
mutate(flag = ifelse(all(c("P", "R") %in% status), "Yes", "No"))

但是,使用逻辑标志可能会更好。它完全避免了 ifelse(使其更快),并且使之后的子集化变得非常容易:

data1 %>% 
group_by(claim_id) %>%
mutate(flag = all(c("P", "R") %in% status))

关于r - Ifelse 在 dplyr 内需要更长的时间来执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34752076/

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