dplyr-使用列表进行突变内的ifelse [英] dplyr - ifelse within mutate using list

查看:73
本文介绍了dplyr-使用列表进行突变内的ifelse的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给出如下所示的数据框 df

Given a data frame df like below

text <- "
model,var,value
M1,a,12211
M1,b1,10.21
M1,b2,5.07
M1,c1,41.8
M1,c2,58.2
M1,d,1.6
M2,a,11922
M2,b1,15.6
M2,b2,8.9
M2,c1,38.1
M2,c2,61.9
M2,d,1.8
M2,a,13101
M2,b1,9.21
M2,b2,6.56
M2,c1,36.07
M2,c2,63.93
M2,d,1.75
"
df <- read.table(textConnection(text), sep=",", header = T)

我想添加一个col var2 基于dplyr mutate var 的值。

I want to add a col var2 based on the value of var via dplyr mutate.

基于以下逻辑。

如果 var =='b1' var =='b2'然后所有B
如果 var =='c1' var =='c2'然后所有C
else var

If var == 'b1' or var == 'b2' then All B If var == 'c1' or var == 'c2' then All C else var

我想按以下方式存储映射并使用它来构建以上逻辑

I want to store the mapping as follows and use it to build the above logic

mapping <- c("All B"= list(c('b1', 'b2')), "All C" = list(c('c1', 'c2')))
> mapping    
$`All B`
[1] "b1" "b2"

$`All C`
[1] "c1" "c2"

预期输出为

   model var    value var2
1     M1   a 12211.00    a
2     M1  b1    10.21    All B
3     M1  b2     5.07    All B
4     M1  c1    41.80    All C
5     M1  c2    58.20    All C
6     M1   d     1.60    d
7     M2   a 11922.00    a
8     M2  b1    15.60    All B
9     M2  b2     8.90    All B
10    M2  c1    38.10    All C
11    M2  c2    61.90    All C
12    M2   d     1.80    d
13    M2   a 13101.00    a
14    M2  b1     9.21    All B
15    M2  b2     6.56    All B
16    M2  c1    36.07    All C
17    M2  c2    63.93    All C
18    M2   d     1.75    d

我打算将dplyr与 ifelse 一起使用,如下所示

I plan to use dplyr with an ifelse as follows

df %>%
  mutate(var2 = ifelse(# what should go here )


推荐答案

下面是使用<$ c $的示例解决方案c> case_when (如注释中所建议):

Here is an example solution using case_when (as suggested in the comments):

df %>%
    mutate(
        var = as.character(var),
        var2 = case_when(
            var == "b1" | var == "b2" ~ "All B",
            var == "c1" | var == "c2" ~ "All C",
            TRUE ~ var))
#   model var    value  var2
#1     M1   a 12211.00     a
#2     M1  b1    10.21 All B
#3     M1  b2     5.07 All B
#4     M1  c1    41.80 All C
#5     M1  c2    58.20 All C
#6     M1   d     1.60     d
#7     M2   a 11922.00     a
#8     M2  b1    15.60 All B
#9     M2  b2     8.90 All B
#10    M2  c1    38.10 All C
#11    M2  c2    61.90 All C
#12    M2   d     1.80     d
#13    M2   a 13101.00     a
#14    M2  b1     9.21 All B
#15    M2  b2     6.56 All B
#16    M2  c1    36.07 All C
#17    M2  c2    63.93 All C
#18    M2   d     1.75     d    

这篇关于dplyr-使用列表进行突变内的ifelse的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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