2016-07-26 102 views
2

在基本R中执行以下操作的dplyr类似物是什么?在dplyr中过滤和未过滤

iris$Sepal.Length[iris$Sepal.Length>2] <- iris$Sepal.Length[iris$Sepal.Length>2] * 10 

我试图使用过滤器,但不能回到原始数据集(无join

+0

''mutate' with'ifelse',例如'iris%>%mutate(Sepal.Length = ifelse(Sepal.Length> 2,Sepal.Length * 10,Sepal.Length))' – alistaire

+0

多年来一直使用dplyr,自己还没有想出这个。有一个dplyr扩展库来实现这一点,但显然不令人满意。 –

+0

@alistaire你想回答吗?你先拿出来。如果你想,我可以删除我的。 – Psidom

回答

2

您可以使用mutateifelse得到相同的结果,从@alistaire评论:

iris %>% mutate(Sepal.Length = ifelse(Sepal.Length > 2, Sepal.Length * 10, Sepal.Length)) 
+1

很好的答案,但不知何故令人不满意。我真的错过了'mutate_if'。 –

+0

@KonradRudolph之前没有真正使用过该功能。可能是更好的解决方案。我想知道这是否是列条件,即选择列的谓词。 – Psidom

+1

这是关键:函数[不存在(在dplyr中)](https://github.com/hadley/dplyr/issues/425)(dplyr 5.0确实引入了这个名字的函数,但它莫名其妙地令人讨厌做了不同的事情)。 –

0

如果我们使用data.table,我们能够避免ifelse,并使其更快

library(data.table) 
as.data.table(iris)[Sepal.Length > 2, Sepal.Length := Sepal.Length * 10]