1

I want to get the earliest day in the data set for every MemberID. But i need to do a ifelse in the aggregate function to sort out some data. Because there are lots of transaction record but i only need the earliest one after the user adopt to mobile channel (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 )  

Should be a list like this:

MEMBERID   Date
212        2009/04/20
....
neves
  • 796
  • 2
  • 10
  • 36
Hunk Lee
  • 11
  • 1
  • Please show a [mcve] of your problem with data, code, and expected results. Read [How to make a great R reproducible Example](https://stackoverflow.com/q/5963269/8366499) to learn how to ask a strong question that will get a useful result – divibisan Apr 04 '19 at 15:59

1 Answers1

1

You can use the subset argument in the aggregate function to select some part of your dataframe. But, you will need to use a formula interface. Here is an example with iris:

> 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

You havent post a dput() of your data, but I think it will be something like this:

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

Hope it serves you.