2016-07-26 3 views
2

Что будет аналогом dplyr, выполняющим следующую операцию в базе R?фильтр и нефильтр в dplyr

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

Я пытаюсь использовать фильтр, но не может вернуться к исходному набору данных (без join)

+0

'mutate' с' ifelse', например. 'iris%>% mutate (Sepal.Length = ifelse (Sepal.Length> 2, Sepal.Length * 10, Sepal.Length))' – alistaire

+0

Использует dplyr в течение многих лет, еще не понял этого. Там есть библиотека расширения dplyr, которая реализует это, но это явно неудовлетворительно. –

+0

@alistaire Вы хотите ответить? Сначала вы придумали это. Если захочешь, я смогу удалить мою. – Psidom

ответ

2

Вы можете использовать mutate с ifelse, чтобы получить те же результаты, как и замечания @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] 
Смежные вопросы