过去,我在新列中创建了一个标签,如
df$type[df$variable %in% c("sw.1.", "sw.2.", "sw.3.", "sw.4.", "sw.5.")]<-"water"
df$type[df$variable %in% c("st.1.", "st.2.", "st.3.", "st.4.", "st.5.")]<-"temp"
但现在我正在使用dplyr并希望将其输入。但是,我无法弄清楚如何使用mutate执行此操作。这是我的第一次拍摄:
mutate(df, type = ((select(df, starts_with("sw"))) == "temp"))
但它不起作用。
一些示例数据:
plot variable value
3 sw1 4
4 sw1 5
3 sw1 4
4 sw2 2
5 sw2 3
3 st1 4
4 st2 5
5 st1 5
4 st2 2
答案 0 :(得分:2)
试试这个:
> mutate(df, type = c("water", "temp") [
grepl("sw", variable)+2*grepl("st", variable)])
plot variable value type
1 3 sw1 4 water
2 4 sw1 5 water
3 3 sw1 4 water
4 4 sw2 2 water
5 5 sw2 3 water
6 3 st1 4 temp
7 4 st2 5 temp
8 5 st1 5 temp
9 4 st2 2 temp
这使用从两个逻辑向量之和构造的索引。可以更加紧凑地扩展到嵌套ifelse语句的更多情况。如果想要一个&#34;既不是&#34;或&#34;其他&#34;选项可以使第一项成为逻辑向量加1。
答案 1 :(得分:1)
我们可以使用ifelse
来创建&#39;类型&#39;柱
mutate(df, type= ifelse(variable %in% paste0('sw', 1:5), 'water', 'temp'))
# plot variable value type
#1 3 sw1 4 water
#2 4 sw1 5 water
#3 3 sw1 4 water
#4 4 sw2 2 water
#5 5 sw2 3 water
#6 3 st1 4 temp
#7 4 st2 5 temp
#8 5 st1 5 temp
#9 4 st2 2 temp