在R mutate

时间:2015-06-25 14:46:02

标签: r dataframe conditional dplyr

我目前在R中有一个看起来像这样的数据框

   V1 V2 V3 V4 Animal

1  2  2  3  5  Dog

2  2  4  3  1  Dog

3  1  4  1  1  Cat

4  5  5  1  3  Cat

5  5  5  5  3  Bird

6  3  3  3  4  Bird

我使用group_by按动物分组数据。 我想创建一个新的列V6,它取V4列,将较低的值除以较高的值,如果该值小于.5,则V6 = A,ifelse取V6 = b .. 有没有办法在R中使用带有条件语句的mutate函数? 实际的数据框要大得多,所以我宁愿不必手动完成。 这就是我希望最终数据框看起来像

   V1 V2 V3 V4 Animal V6

1  2  2  3  5  Dog  A

2  2  4  3  1  Dog  A

3  1  4  1  1  Cat  A

4  5  5  1  3  Cat  A

5  5  5  5  3  Bird B

6  3  3  3  4  Bird B

这就是我用

开头的
df %>% mutate(Type = if(min/max < .5)A,
              ifelse, B)

但我知道这是不正确的。 谢谢!

2 个答案:

答案 0 :(得分:3)

使用dplyr即可试用

dat %>% group_by(Animal) %>% mutate(new = ifelse(min(V4)/max(V4) < 0.5, "A", "B"))

#Source: local data frame [6 x 6]
#Groups: Animal

#  X1 V2 V3 V4 Animal new
#1  2  2  3  5    Dog   A
#2  2  4  3  1    Dog   A
#3  1  4  1  1    Cat   A
#4  5  5  1  3    Cat   A
#5  5  5  5  3   Bird   B
#6  3  3  3  4   Bird   B

答案 1 :(得分:1)

您也可以在没有ifelse

的情况下执行此操作
 df1 %>% 
   group_by(Animal) %>% 
   mutate(Type= c('A', 'B')[((min(V4)/max(V4)) >=0.5)+1L])
#  V1 V2 V3 V4 Animal Type
#1  2  2  3  5    Dog    A
#2  2  4  3  1    Dog    A
#3  1  4  1  1    Cat    A
#4  5  5  1  3    Cat    A
#5  5  5  5  3   Bird    B
#6  3  3  3  4   Bird    B