Агрегатная функция с ifelse - PullRequest
1 голос
/ 04 апреля 2019

Я хочу получить самый ранний день в наборе данных для каждого MemberID.Но мне нужно сделать ifelse в функции aggregate, чтобы отсортировать некоторые данные.Потому что есть много записей транзакций, но мне нужна только самая ранняя запись после того, как пользователь перешел на мобильный канал (Mobile=="1").

aggregate(Mobile$OrderDate, by=list(MemberID=Mobile$MemberID),min)

aggregate(OrderDate ~ MemberID, data=Mobile, function(x) if(Mobile=="1") 

min(OrderDate) else NA )  

Должен быть такой список:

MEMBERID   Date
212        2009/04/20
....

1 Ответ

1 голос
/ 04 апреля 2019

Вы можете использовать аргумент subset в функции aggregate, чтобы выбрать некоторую часть вашего фрейма данных. Но вам нужно будет использовать интерфейс формулы. Вот пример с радужной оболочкой:

> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
> aggregate(Sepal.Length ~ Species, iris, subset = iris$Species %in% c("versicolor", "virginica"), min)
     Species Sepal.Length
1 versicolor          4.9
2  virginica          4.9

Вы не публикуете dput () ваших данных, но я думаю, что это будет примерно так:

> aggregate(OrderDate ~ MemberID, Mobile, subset = (Mobile == "1"), min)

Надеюсь, это вам подойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...