r-如何在具有多个条件的其他列的基础上添加列



我有一个数据帧。我想写一个创建依赖于其他列的列的条件。这是:

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

两个注意事项:

  1. 我假设你想编码";健康的";如果id以";H〃;或者如果类型是"0";blond507";,尽管你在帖子中说应该是";和">
  2. 您编辑了您的代码,使507类型现在为";blond507";。请注意,这是不起作用的,因为其他值是整数或双值;blond507";将是一个角色。所以您需要调整选项卡的输入代码(请参阅我文章的开头(

最新更新