R-dplyr-mutate_if有多个条件

时间:2018-08-23 16:32:52

标签: r dplyr conditional mutate

我想基于多个条件对一列进行突变。例如,对于最大为5且列名包含“ xy”的每一列,应用一个函数。

df <- data.frame(
  xx1 = c(0, 1, 2),
  xy1 = c(0, 5, 10),
  xx2 = c(0, 1, 2),
  xy2 = c(0, 5, 10)
)
> df

xx1 xy1 xx2 xy2
1   0   0   0   0
2   1   5   1   5
3   2  10   2  10

df2 <- df %>% mutate_if(~max(.)==10, as.character)
> str(df2)
'data.frame':   3 obs. of  4 variables:
 $ xx1: num  0 1 2
 $ xy1: chr  "0" "5" "10"
 $ xx2: num  0 1 2
 $ xy2: chr  "0" "5" "10"
#function worked
df3 <- df %>% mutate_if(str_detect(colnames(.), "xy"), as.character)
> str(df3)
'data.frame':   3 obs. of  4 variables:
 $ xx1: num  0 1 2
 $ xy1: chr  "0" "5" "10"
 $ xx2: num  0 1 2
 $ xy2: chr  "0" "5" "10"
#Worked again

现在,当我尝试将它们组合在一起

df4 <- df %>% mutate_if((~max(.)==10) & (str_detect(colnames(.), "xy")), as.character)
  

(〜max(。)== 10)和(str_detect(colnames(。),“ xy”))中的错误:     操作仅适用于数字,逻辑或复杂类型

我想念什么?

2 个答案:

答案 0 :(得分:2)

必须使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul class="nav nav-tabs"> <li class="active"><a data-toggle="tab" href="#menu1">Menu 1</a></li> <li><a data-toggle="tab" href="#menu2">Menu 2</a></li> <li><a data-toggle="tab" href="#menu3">Menu 3</a></li> </ul> <div class="tab-content"> <div id="menu1" class="tab-pane fade in active"> <p>Menu 1</p> </div> <div id="menu2" class="tab-pane fade hide"> <p>Menu 2</p> </div> <div id="menu3" class="tab-pane fade hide"> <p>Menu 3</p> </div> </div>代替names

colnames

答案 1 :(得分:1)

更简洁的方法是使用 dplyr 中的 across

df4 <- df %>% mutate(across(c(where(function(x)max(x)==10),contains('xy')),as.character))