dplyr-使用列表进行突变内的ifelse [英] dplyr - ifelse within mutate using list
本文介绍了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屋!
查看全文