Dear Rxperts... I would like to conditionally include an element (as a column) in a dataframe. Please see the sample code below: a1 <- data.frame(P=rep(1,10),Qr=LETTERS[1:10],b=letters[1:10],R=rep(c("A","B"),each=5)) lc1 <- list(C1 = "P",C2 ifelse(is.element("Q",names(a1)),"Q",ifelse(is.element("b",names(a1)),"b",NULL)),C3="R") lc2 <- list(C1 = "P",C2 ifelse(is.element("Q",names(a1)),"Q",ifelse(is.element("b",names(a1)),"b",NULL)),C3="Ra") a2 <- subset(a1, sel=unlist(lc1)) # this works a3 <- subset(a1, sel=unlist(lc2)) # this doesn't Is there a way to dynamically include columns in a dataframe? Regards, santosh [[alternative HTML version deleted]]
Dear Rxperts... I would like to conditionally include an element (as a column) in a dataframe. Please see the sample code below: There is a correction to the earlier post.. my apologies... a1 <- data.frame(P=rep(1,10),Qr=LETTERS[1:10],b=letters[1:10], R=rep(c("A","B"),each=5)) lc1 <- list(C1 = "P",C2 ifelse(is.element("Q",names(a1)),"Q",ifelse(is.element("b",names(a1)),"b",NULL)),C3="R") lc2 <- list(C1 = "P",C2 ifelse(is.element("Q",names(a1)),"Q",ifelse(is.element("b",names(a1)),"b",NULL)), C3=ifelse(is.element("Ra",names(a1)),"Ra",NULL)) *The error for the above:* Error in ifelse(is.element("Ra", names(a1)), "Ra", NULL) : replacement has length zero In addition: Warning message: In rep(no, length.out = length(ans)) : 'x' is NULL so the result will be NULL a2 <- subset(a1, sel=unlist(lc1)) # this works a3 <- subset(a1, sel=unlist(lc2)) # this doesn't work Is there a way to dynamically include columns in a dataframe? Regards, santosh On Fri, Jan 10, 2014 at 12:45 PM, Santosh <santosh2005@gmail.com> wrote:> Dear Rxperts... > > I would like to conditionally include an element (as a column) in a > dataframe. Please see the sample code below: > > a1 <- > data.frame(P=rep(1,10),Qr=LETTERS[1:10],b=letters[1:10],R=rep(c("A","B"),each=5)) > > lc1 <- list(C1 = "P",C2 > ifelse(is.element("Q",names(a1)),"Q",ifelse(is.element("b",names(a1)),"b",NULL)),C3="R") > lc2 <- list(C1 = "P",C2 > ifelse(is.element("Q",names(a1)),"Q",ifelse(is.element("b",names(a1)),"b",NULL)),C3="Ra") > > a2 <- subset(a1, sel=unlist(lc1)) # this works > a3 <- subset(a1, sel=unlist(lc2)) # this doesn't > > Is there a way to dynamically include columns in a dataframe? > > Regards, > santosh >[[alternative HTML version deleted]]
MacQueen, Don
2014-Jan-10 21:01 UTC
[R] Conditional inclusion of an element in an R object
Apologies, but all that ifelse() stuff is too hard to follow. What I would do is compute a character vector of column names to keep, then do a1[ , names.to.keep] -Don -- Don MacQueen Lawrence Livermore National Laboratory 7000 East Ave., L-627 Livermore, CA 94550 925-423-1062 On 1/10/14 12:53 PM, "Santosh" <santosh2005 at gmail.com> wrote:>Dear Rxperts... > >I would like to conditionally include an element (as a column) in a >dataframe. Please see the sample code below: > >There is a correction to the earlier post.. my apologies... >a1 <- data.frame(P=rep(1,10),Qr=LETTERS[1:10],b=letters[1:10], >R=rep(c("A","B"),each=5)) > > lc1 <- list(C1 = "P",C2 >ifelse(is.element("Q",names(a1)),"Q",ifelse(is.element("b",names(a1)),"b", >NULL)),C3="R") > lc2 <- list(C1 = "P",C2 >ifelse(is.element("Q",names(a1)),"Q",ifelse(is.element("b",names(a1)),"b", >NULL)), >C3=ifelse(is.element("Ra",names(a1)),"Ra",NULL)) >*The error for the above:* >Error in ifelse(is.element("Ra", names(a1)), "Ra", NULL) : > replacement has length zero >In addition: Warning message: >In rep(no, length.out = length(ans)) : > 'x' is NULL so the result will be NULL > >a2 <- subset(a1, sel=unlist(lc1)) # this works >a3 <- subset(a1, sel=unlist(lc2)) # this doesn't work > >Is there a way to dynamically include columns in a dataframe? > >Regards, >santosh > > >On Fri, Jan 10, 2014 at 12:45 PM, Santosh <santosh2005 at gmail.com> wrote: > >> Dear Rxperts... >> >> I would like to conditionally include an element (as a column) in a >> dataframe. Please see the sample code below: >> >> a1 <- >> >>data.frame(P=rep(1,10),Qr=LETTERS[1:10],b=letters[1:10],R=rep(c("A","B"), >>each=5)) >> >> lc1 <- list(C1 = "P",C2 >> >>ifelse(is.element("Q",names(a1)),"Q",ifelse(is.element("b",names(a1)),"b" >>,NULL)),C3="R") >> lc2 <- list(C1 = "P",C2 >> >>ifelse(is.element("Q",names(a1)),"Q",ifelse(is.element("b",names(a1)),"b" >>,NULL)),C3="Ra") >> >> a2 <- subset(a1, sel=unlist(lc1)) # this works >> a3 <- subset(a1, sel=unlist(lc2)) # this doesn't >> >> Is there a way to dynamically include columns in a dataframe? >> >> Regards, >> santosh >> > > [[alternative HTML version deleted]] > >______________________________________________ >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.