【发布时间】:2017-12-15 19:12:22
【问题描述】:
我一直在寻找解决此问题的方法,但没有成功。我有一个鱼类数据框,我需要在 27 列数据上应用 dplyr 窗口函数 (transmute_at)。数据框子集:
df <- data.frame(
Otherspp = c("suck SD", "BT", "SD RS", "RSS"),
Dominantspp = c("OM", "OM", "RS", "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),
suck = rep("suckers|SUCKERS|sucker|SUCKER|suck|SUCK|su|SU", 4)
)
我需要使用填充了常见鱼代码/名称(NP、OM、suck)的列来评估前四列中的表达式并根据这些列中的每一列输出不同的数字,如果满足表达式。到目前为止,我只能弄清楚如何让它运行一列。如何为将创建的新列 transmute 和用于评估每个表达式的列索引 transmute_at 中的列名。
这适用于一列:
df <- subset(df[, c(1:4, 6)]) # using column OM for best example
df %>%
rowwise() %>%
transmute(OM = case_when(
grepl(OM, Dominantspp) ~ "5",
grepl(OM, Commonspp) ~ "3",
grepl(OM, Rarespp) ~ "1",
grepl(OM, Otherspp) ~ "1",
TRUE ~ "0"
)
)
提前致谢!
【问题讨论】: