R:在dplyr::mutate()中使用min()
我想我错过了一些非常简单的东西。从R:在dplyr::mutate()中使用min(),r,min,dplyr,R,Min,Dplyr,我想我错过了一些非常简单的东西。从?min的帮助页面: pmax和pmin将一个或多个向量(或矩阵)作为参数和 返回一个向量,给出函数的“平行”最大值(或最小值) 向量 另一方面: max和min返回中所有值的最大值或最小值 他们的论点 所以您想在这里使用pmin。对于dplyr,一个选项(如上所述)如下: df <- df %>% mutate(v3=ifelse(v1 !=0, v1/min(v1,v2), 0)) 这里很好的副作用是,您可以避免使用if
?min的帮助页面:
pmax和pmin将一个或多个向量(或矩阵)作为参数和
返回一个向量,给出函数的“平行”最大值(或最小值)
向量
另一方面:
max和min返回中所有值的最大值或最小值
他们的论点
所以您想在这里使用pmin
。对于dplyr,一个选项(如上所述)如下:
df <-
df %>% mutate(v3=ifelse(v1 !=0, v1/min(v1,v2), 0))
这里很好的副作用是,您可以避免使用ifelse
,而只是与逻辑向量(TRUE/FALSE,然后转换为1/0)叠加。您可以使用pmin
即转换(df,v3=ifelse(v1!=0,v1/do.call(pmin,df),0))
在这里加载plyr
包有什么特别的原因吗?我不记得应该先加载哪一个,但在这种情况下,你根本不应该加载plyr
。df%>%mutate(v3=(v1!=0)*v1/pmin(v1,v2))
?这里有一种使用do
的方法,即df%>%rowwise()%>%do(data.frame(,.v3=(.v1!=0)*.$v1/min(.v1,.v2))
您可以将mutate
与rowwise
-df%>%rowwise%>%mutate(v3=ifelse(v1!=0,v1/min(v1,v2),0))一起使用
df <-
df %>% mutate(v3=ifelse(v1 !=0, v1/min(v1,v2), 0))
df %>% mutate(v3 = (v1 != 0) * v1/pmin(v1,v2))