我目前在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)
但我知道这是不正确的。 谢谢!
答案 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