在基本R中执行以下操作的dplyr类似物是什么?在dplyr中过滤和未过滤
iris$Sepal.Length[iris$Sepal.Length>2] <- iris$Sepal.Length[iris$Sepal.Length>2] * 10
我试图使用过滤器,但不能回到原始数据集(无join
)
在基本R中执行以下操作的dplyr类似物是什么?在dplyr中过滤和未过滤
iris$Sepal.Length[iris$Sepal.Length>2] <- iris$Sepal.Length[iris$Sepal.Length>2] * 10
我试图使用过滤器,但不能回到原始数据集(无join
)
您可以使用mutate
与ifelse
得到相同的结果,从@alistaire评论:
iris %>% mutate(Sepal.Length = ifelse(Sepal.Length > 2, Sepal.Length * 10, Sepal.Length))
很好的答案,但不知何故令人不满意。我真的错过了'mutate_if'。 –
@KonradRudolph之前没有真正使用过该功能。可能是更好的解决方案。我想知道这是否是列条件,即选择列的谓词。 – Psidom
这是关键:函数[不存在(在dplyr中)](https://github.com/hadley/dplyr/issues/425)(dplyr 5.0确实引入了这个名字的函数,但它莫名其妙地令人讨厌做了不同的事情)。 –
如果我们使用data.table
,我们能够避免ifelse
,并使其更快
library(data.table)
as.data.table(iris)[Sepal.Length > 2, Sepal.Length := Sepal.Length * 10]
''mutate' with'ifelse',例如'iris%>%mutate(Sepal.Length = ifelse(Sepal.Length> 2,Sepal.Length * 10,Sepal.Length))' – alistaire
多年来一直使用dplyr,自己还没有想出这个。有一个dplyr扩展库来实现这一点,但显然不令人满意。 –
@alistaire你想回答吗?你先拿出来。如果你想,我可以删除我的。 – Psidom