【发布时间】:2020-08-12 14:24:24
【问题描述】:
我有 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
【问题讨论】: