gpt4 book ai didi

r - dplyr case_when 跨组

转载 作者:行者123 更新时间:2023-12-01 21:23:49 25 4
gpt4 key购买 nike

我有df

df = data.frame(
group = c(rep("A", 3), rep("B", 3)),
vt = c("SO:0001574", "SO:0001619", "SO:0001619", "SO:0001619", "SO:0001619", "SO:0001821")
)

和两个向量:

tier_1 = c("SO:0001574", "SO:0001575")
tier_2 = c("SO:0001821", "SO:0001822")

我想产生一个输出:

  group         vt     ct
1 A SO:0001574 tier_1
2 A SO:0001619 tier_1
3 A SO:0001619 tier_1
4 B SO:0001619 tier_2
5 B SO:0001619 tier_2
6 B SO:0001821 tier_2

即我想生成第三列 ct,它根据 tier_1 或 tier_2 中 vt 列的存在进行填充,以便给定组中的所有行都填充该层类型。

我试过:

df %>%
dplyr::group_by(group) %>%
dplyr::mutate(tier = dplyr::case_when(
vt %in% tier_1 ~ "tier_1",
vt %in% tier_2 ~ "tier_2"))

但这只会填充单独的行,而不是组中的所有行:

# A tibble: 6 x 4
# Groups: group [2]
group vt ct tier
<chr> <chr> <chr> <chr>
1 A SO:0001574 tier_1 tier_1
2 A SO:0001619 tier_1 NA
3 A SO:0001619 tier_1 NA
4 B SO:0001619 tier_2 NA
5 B SO:0001619 tier_2 NA
6 B SO:0001821 tier_2 tier_2

最佳答案

将代码包装在 any 中以获得每组一个逻辑值:

library(dplyr)

df %>%
group_by(group) %>%
mutate(tier = case_when(
any(vt %in% tier_1) ~ "tier_1",
any(vt %in% tier_2) ~ "tier_2"))

# group vt tier
# <chr> <chr> <chr>
#1 A SO:0001574 tier_1
#2 A SO:0001619 tier_1
#3 A SO:0001619 tier_1
#4 B SO:0001619 tier_2
#5 B SO:0001619 tier_2
#6 B SO:0001821 tier_2

关于r - dplyr case_when 跨组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63378585/

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