我有一个数据帧。我想写一个创建依赖于其他列的列的条件。这是:
tab <- tibble::tribble(
~dataset_id, ~type,
"Site4H", 268,
"Site4D", 479,
"SIte8H", 345,
"Site8D", 567,
"Site8K", blond507
)
library(dplyr)
tab %>%
mutate(state = case_when(
endsWith(dataset_id, "H") ~ "healthy",
endsWith(dataset_id, "D") ~ "disease",
TRUE ~ NA_character_
))
正如您所看到的,如果列dataset_id中的值以H结尾,则列状态等于健康;类型";以";金发";。我怎么能那样做?我需要使用这些精确的函数,所以使用其他库的解决方案并不好。
期望的结果是:
dataset_id type state
Site4H 268 healthy
Site4D 479 disease
SIte8H 345 healthy
Site8D 567 disease
Site8K blond507 healthy
tab <- tibble::tribble(
~dataset_id, ~type,
"Site4H", "268",
"Site4D", "479",
"SIte8H", "345",
"Site8D", "567",
"Site8K", "blond507"
)
tab %>%
mutate(state = case_when(
endsWith(dataset_id, "H") | startsWith(type, "blond") ~ "healthy",
endsWith(dataset_id, "D") ~ "disease",
TRUE ~ NA_character_
))
因此,您可以简单地将类型限制添加到您的case_when代码中,该代码给出:
# A tibble: 5 x 3
dataset_id type state
<chr> <chr> <chr>
1 Site4H 268 healthy
2 Site4D 479 disease
3 SIte8H 345 healthy
4 Site8D 567 disease
5 Site8K blond507 healthy
两个注意事项:
- 我假设你想编码";健康的";如果id以";H〃;或者如果类型是"0";blond507";,尽管你在帖子中说应该是";和">
- 您编辑了您的代码,使507类型现在为";blond507";。请注意,这是不起作用的,因为其他值是整数或双值;blond507";将是一个角色。所以您需要调整选项卡的输入代码(请参阅我文章的开头(