使用mutate创建具有条件的新列标签

时间:2015-08-28 18:37:33

标签: r dplyr

过去,我在新列中创建了一个标签,如

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 

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