在基本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