【问题标题】:Using conditionals and summary functions in R mutate在 R mutate 中使用条件和汇总函数
【发布时间】:2015-09-12 06:05:36
【问题描述】:

我目前在 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 列,将较低的值除以较高的值,如果该值小于 0.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)

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

【问题讨论】:

  • 如果您只取V4 列,其中min = 1max = 5 您将获得V6 = 1/5 的所有值,即0.2,因此总是A。请解释清楚。也许您的意思是 V1 到 V4
  • minmax 值部分不清楚
  • 我想按动物来做,这样V4的最小值除以每个动物的V4最大值,然后V6对每个动物都有不同的值(A或B )
  • dat %&gt;% group_by(Animal) %&gt;% mutate(new = ifelse(min(V4)/max(V4) &lt; 0.5, "A", "B"))
  • 我没有注意到 group by 因为在您的原始代码中没有组

标签: r dataframe conditional dplyr


【解决方案1】:

使用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

【讨论】:

  • 谢谢!这正是我所要求的!
【解决方案2】:

没有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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-06
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 2021-08-13
    • 1970-01-01
    相关资源
    最近更新 更多