2016-07-26 98 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]