[R] subset of obersevation depending on multiple conditions

Frede Aakmann Tøgersen frtog at vestas.com
Mon Apr 28 14:35:54 CEST 2014


So Christoph now have 3 methods giving him three different results. Of course it is not really clear what Christoph really wants ;-)

Yours sincerely / Med venlig hilsen


Frede Aakmann Tøgersen
Specialist, M.Sc., Ph.D.
Plant Performance & Modeling

Technology & Service Solutions
T +45 9730 5135
M +45 2547 6050
frtog at vestas.com
http://www.vestas.com

Company reg. name: Vestas Wind Systems A/S
This e-mail is subject to our e-mail disclaimer statement.
Please refer to www.vestas.com/legal/notice
If you have received this e-mail in error please contact the sender. 


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
> On Behalf Of arun
> Sent: 28. april 2014 13:58
> To: R. Help
> Subject: Re: [R] subset of obersevation depending on multiple conditions
> 
> Hi,
> 
> The conditions are not very clear.  Based on the rows you wanted to pick,
> may be this helps,
> 
> #It is better to dput() the example.
> 
>     dat <- structure(list(Date = structure(c(14610, 14611, 14612, 14613,
> 14614, 14615, 14616, 14617, 14618, 14619, 14620, 14621, 14622,
> 14623, 14624, 14625, 14626, 14627, 14628, 14629, 14630, 14631,
> 14632, 14633, 14634, 14635, 14636, 14637, 14638, 14639), class = "Date"),
>     N = c(0, 1.9, 0, 0, 1.6, 0, 0.3, 0, 1.1, 1.7, 2.6, 0, 0,
>     0, 0, 0, 0, 0.2, 0, 0, 0, 0, 0, 0, 0, 0, 1.9, 6.2, 0, 0)), .Names = c("Date",
> "N"), row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9",
> "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
> "21", "22", "23", "24", "25", "26", "27", "28", "29", "30"), class = "data.frame")
> 
> 
> indx <- with(dat, N <=0.3)
> 
> rowInd <- unlist(lapply(split(seq_along(indx), cumsum(c(TRUE, diff(indx) ==
> 1))), function(x) {
>     x1 <- indx[x]
>     x2 <- with(dat, N[x])
>     x3 <- if (length(x2[x1]) > 1)
>         !cumsum(c(0, diff(x2[x1])) < 0)
>     x[c(x3, rep(FALSE, length(x2) - length(x3)))]
> }), use.names = FALSE)
> rowInd
> # [1]  3  4  6  7 12 13 14 15 16 17 18 29 30
> dat[rowInd,]
> 
> 
> 
> A.K.
> 
> 
> Hello,
> 
> I want to subset a data.frame containing the variables "Date" in (%Y %m %d
> ) and "N".
> 
> I want to print "Date" and "N" if  N is less than or equal to 0.3 and if
> "N" is also less than or equal to 0.3 on the day before the day where "N"
> is less than or equal to 0.3.
> 
> This would be the case in line 3 and 4 , 6 and 7, 12 to 18, and so on.
> 
> "Date"    "N"
> "1"    2010-01-01    0
> "2"    2010-01-02    1.9
> "3"    2010-01-03    0
> "4"    2010-01-04    0
> "5"    2010-01-05    1.6
> "6"    2010-01-06    0
> "7"    2010-01-07    0.3
> "8"    2010-01-08    0
> "9"    2010-01-09    1.1
> "10"    2010-01-10    1.7
> "11"    2010-01-11    2.6
> "12"    2010-01-12    0
> "13"    2010-01-13    0
> "14"    2010-01-14    0
> "15"    2010-01-15    0
> "16"    2010-01-16    0
> "17"    2010-01-17    0
> "18"    2010-01-18    0.2
> "19"    2010-01-19    0
> "20"    2010-01-20    0
> "21"    2010-01-21    0
> "22"    2010-01-22    0
> "23"    2010-01-23    0
> "24"    2010-01-24    0
> "25"    2010-01-25    0
> "26"    2010-01-26    0
> "27"    2010-01-27    1.9
> "28"    2010-01-28    6.2
> "29"    2010-01-29    0
> "30"    2010-01-30    0
> 
> I tried some methods with subset but I couldn't work it out. Maybe I have
> to use something like " for (i in x) {} but as a beginner I really don't
> know how to do it.
> 
> Can somebody please help me with this.
> 
> Thanks in advance,
> 
> Christoph
> 
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-
> guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list