可以将dplyr包用于条件突变吗? [英] can dplyr package be used for conditional mutating?

查看:91
本文介绍了可以将dplyr包用于条件突变吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当突变是有条件的(取决于某些列值的值)时,突变体是否可以使用?

Can the mutate be used when the mutation is conditional (depending on the values of certain column values)?

此示例有助于显示我的意思。 >

This example helps showing what I mean.

structure(list(a = c(1, 3, 4, 6, 3, 2, 5, 1), b = c(1, 3, 4, 
2, 6, 7, 2, 6), c = c(6, 3, 6, 5, 3, 6, 5, 3), d = c(6, 2, 4, 
5, 3, 7, 2, 6), e = c(1, 2, 4, 5, 6, 7, 6, 3), f = c(2, 3, 4, 
2, 2, 7, 5, 2)), .Names = c("a", "b", "c", "d", "e", "f"), row.names = c(NA, 
8L), class = "data.frame")

  a b c d e f
1 1 1 6 6 1 2
2 3 3 3 2 2 3
3 4 4 6 4 4 4
4 6 2 5 5 5 2
5 3 6 3 3 6 2
6 2 7 6 7 7 7
7 5 2 5 2 6 5
8 1 6 3 6 3 2

我希望找到一个解决方案我的问题使用dplyr包(是的,我知道这不是应该工作的代码,但我猜这是清楚的)创建一个新的列g:

I was hoping to find a solution to my problem using the dplyr package (and yes I know this not code that should work, but I guess it makes the purpose clear) for creating a new column g:

  library(dplyr)
 df <- mutate(df, if (a == 2 | a == 5 | a == 7 | (a == 1 & b == 4)){g = 2},
        if (a == 0 | a == 1 | a == 4 | a == 3 |  c == 4){g = 3})

我正在寻找的代码的结果应该在这个结果特别示例:

The result of the code I am looking for should have this result in this particular example:

  a b c d e f  g
1 1 1 6 6 1 2  3
2 3 3 3 2 2 3  3
3 4 4 6 4 4 4  3
4 6 2 5 5 5 2 NA
5 3 6 3 3 6 2 NA
6 2 7 6 7 7 7  2
7 5 2 5 2 6 5  2
8 1 6 3 6 3 2  3



有没有人有关于如何在dplyr这样做的想法?这个数据框只是一个例子,我正在处理的数据帧要大得多。因为它的速度我试图使用dplyr,但也许还有其他更好的方法来处理这个问题?

Does anyone have an idea about how to do this in dplyr? This data frame is just an example, the data frames I am dealing with are much larger. Because of its speed I tried to use dplyr, but perhaps there are other, better ways to handle this problem?

推荐答案

使用 ifelse

df %>%
  mutate(g = ifelse(a == 2 | a == 5 | a == 7 | (a == 1 & b == 4), 2,
               ifelse(a == 0 | a == 1 | a == 4 | a == 3 |  c == 4, 3, NA)))

添加:请注意,在dplyr 0.5中,定义了一个 if_else 函数,替代方法是替换 ifelse if_else ;然而,请注意,由于 if_else ifelse 更严格(条件的两条腿必须具有相同的类型),所以 NA 在这种情况下必须用 NA_real _ 替换。

Added: Note that in dplyr 0.5 there is an if_else function defined so an alternative would be to replace ifelse with if_else; however, note that since if_else is stricter than ifelse (both legs of the condition must have the same type) so the NA in that case would have to be replaced with NA_real_ .

df %>%
  mutate(g = if_else(a == 2 | a == 5 | a == 7 | (a == 1 & b == 4), 2,
               if_else(a == 0 | a == 1 | a == 4 | a == 3 |  c == 4, 3, NA_real_)))

这篇关于可以将dplyr包用于条件突变吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆