我有一个数据框:
df <- data.frame(
Otherspp = c("suck SD", "BT", "SD RS", "RSS"),
Dominantspp = c("OM", "OM", "RSS", "CH"),
Commonspp = c(" ", " ", " ", "OM"),
Rarespp = c(" ", " ", "SD", "NP"),
NP = rep("northern pikeminnow|NORTHERN PIKEMINNOW|np|NP|npm|NPM", 4),
OM = rep("steelhead|STEELHEAD|rainbow trout|RAINBOW TROUT|st|ST|rb|RB|om|OM", 4),
RSS = rep("redside shiner|REDSIDE SHINER|rs|RS|rss|RSS", 4),
suck = rep("suckers|SUCKERS|sucker|SUCKER|suck|SUCK|su|SU|ss|SS", 4)
)
我需要使用填充有常见鱼类代码/名称(NP、OM、RSS、suck)的列来评估前四列中的表达式,并根据每个列输出 1/0(如果表达式完全满足) 。我下面的代码不匹配完整的单词(仅部分)并提供不正确的数据(请参阅下面的结果小标题)。
df %>%
rowwise() %>%
transmute_at(vars(NP, OM, RSS, suck),
funs(case_when(
grepl(., Dominantspp) ~ "1",
grepl(., Commonspp) ~ "1",
grepl(., Rarespp) ~ "1",
grepl(., Otherspp) ~ "1",
TRUE ~ "0"))) %>%
ungroup()
结果:看到在第三行中,“suck”和“RSS”都收到“1”。
# A tibble: 4 x 4
NP OM RSS suck
<chr> <chr> <chr> <chr>
1 0 1 0 1
2 0 1 0 0
3 0 0 1 1
4 1 1 1 1
期望的输出:
NP OM RSS suck
1 0 1 0 1
2 0 1 0 0
3 0 0 1 0
4 1 1 1 0