Hi all, I would like to use a loop for tasks that occurs repeatedly: # Groups # Umsatz <= 0: 1 (NICHT kaufend) # Umsatz > 0: 2 (kaufend) for (year in c("2011", "2012", "2013", "2014", "2015")) { paste0("Kunden$Kunde_real_", year) <- (paste0("Kunden$Umsatz_", year) <= 0) * 1 + (paste0("Kunden$Umsatz_", year) > 0) * 2 paste0("Kunden$Kunde_real_", year) <- factor(paste0("Kunden$Umsatz_", year), levels = c(1, 2), labels = c("NICHT kaufend", "kaufend")) } This actually does not work due to the fact that the expression "paste0("Kunden$Kunde_real_", year)" ist not interpreted as a variable name by the R script language interpreter. Is there a way to assembly variable names on the fly in R? Regards Georg
The direct answer to your question is to look at ?get and ? assign. The R-ish answer to your question is to store the data as elements of a list rather than separate files and use lapply() instead. Sarah On Friday, April 22, 2016, <G.Maubach at gmx.de> wrote:> Hi all, > > I would like to use a loop for tasks that occurs repeatedly: > > # Groups > # Umsatz <= 0: 1 (NICHT kaufend) > # Umsatz > 0: 2 (kaufend) > for (year in c("2011", "2012", "2013", "2014", "2015")) { > paste0("Kunden$Kunde_real_", year) <- (paste0("Kunden$Umsatz_", year) <> 0) * 1 + > (paste0("Kunden$Umsatz_", year) > > 0) * 2 > paste0("Kunden$Kunde_real_", year) <- factor(paste0("Kunden$Umsatz_", > year), > levels = c(1, 2), > labels = c("NICHT kaufend", > "kaufend")) > } > > This actually does not work due to the fact that the expression > "paste0("Kunden$Kunde_real_", year)" ist not interpreted as a variable name > by the R script language interpreter. > > Is there a way to assembly variable names on the fly in R? > > Regards > > Georg > > ______________________________________________ > R-help at r-project.org <javascript:;> mailing list -- To UNSUBSCRIBE and > more, see > 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. >-- Sarah Goslee http://www.stringpage.com http://www.sarahgoslee.com http://www.functionaldiversity.org [[alternative HTML version deleted]]
Hi Georg, The " around Kunden$* looks unintentional to me. Second: haveyou considered using a long table? Then you would fill a known set of columns. Third if you must have columns based on year I believe df[[a.column.name]] will work. Best Ulrik <G.Maubach at gmx.de> schrieb am Sa., 23. Apr. 2016 07:33:> Hi all, > > I would like to use a loop for tasks that occurs repeatedly: > > # Groups > # Umsatz <= 0: 1 (NICHT kaufend) > # Umsatz > 0: 2 (kaufend) > for (year in c("2011", "2012", "2013", "2014", "2015")) { > paste0("Kunden$Kunde_real_", year) <- (paste0("Kunden$Umsatz_", year) <> 0) * 1 + > (paste0("Kunden$Umsatz_", year) > > 0) * 2 > paste0("Kunden$Kunde_real_", year) <- factor(paste0("Kunden$Umsatz_", > year), > levels = c(1, 2), > labels = c("NICHT kaufend", > "kaufend")) > } > > This actually does not work due to the fact that the expression > "paste0("Kunden$Kunde_real_", year)" ist not interpreted as a variable name > by the R script language interpreter. > > Is there a way to assembly variable names on the fly in R? > > Regards > > Georg > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. >[[alternative HTML version deleted]]
I'm going to assume that Kunden is a data frame, and it has columns (variables) with names like Umstatz_2011 and that you want to create new columns with names like Kunde_real_2011 If that is so, then try this (not tested): for (year in 2011:2015) { nmK <- paste0("Kunde_real_", year) nmU <- paste0("Umsatz_", year) cat('Creating',nmK,'from',nmU,'\n') Kunden[[ nmK ]] <- ifelse( Kunden[[ nmU ]] <= 0, 1, 2) Kunden[[ nmK ]] <- factor( Kunden[[ nmK ]], levels=c(1,2), labels= c("NICHT kaufend", "kaufend") ) } This little example should illustrate the method:> foo <- data.frame(a=1:4) > fooa 1 1 2 2 3 3 4 4> foo[['b']] <- foo[['a']]*3 > fooa b 1 1 3 2 2 6 3 3 9 4 4 12 -- Don MacQueen Lawrence Livermore National Laboratory 7000 East Ave., L-627 Livermore, CA 94550 925-423-1062 On 4/22/16, 8:52 AM, "R-help on behalf of G.Maubach at gmx.de" <r-help-bounces at r-project.org on behalf of G.Maubach at gmx.de> wrote:>Hi all, > >I would like to use a loop for tasks that occurs repeatedly: > ># Groups ># Umsatz <= 0: 1 (NICHT kaufend) ># Umsatz > 0: 2 (kaufend) >for (year in c("2011", "2012", "2013", "2014", "2015")) { > paste0("Kunden$Kunde_real_", year) <- (paste0("Kunden$Umsatz_", year) ><= 0) * 1 + > (paste0("Kunden$Umsatz_", year) > > 0) * 2 > paste0("Kunden$Kunde_real_", year) <- factor(paste0("Kunden$Umsatz_", >year), > levels = c(1, 2), > labels = c("NICHT >kaufend", "kaufend")) > } > >This actually does not work due to the fact that the expression >"paste0("Kunden$Kunde_real_", year)" ist not interpreted as a variable >name by the R script language interpreter. > >Is there a way to assembly variable names on the fly in R? > >Regards > >Georg > >______________________________________________ >R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >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.
G.Maubach at weinwolf.de
2016-Apr-26 06:44 UTC
[R] Antwort: Fw: Re: Creating variables on the fly (SOLVED)
Hi Don, Hi to all readers, many thanks for all your answers and all your help. I adapted Don's code to my data and Don's code does the trick: str(Kunden01) for (year in 2011:2015) { Reeller_Kunde <- paste0("Reeller_Kunde_", year) Umsatz <- paste0("Umsatz_", year) cat('Creating', Reeller_Kunde,'from', Umsatz,'\n') Kunden01[[ Reeller_Kunde ]] <- ifelse( Kunden01[[ Umsatz ]] >= 0, 1, 2) Kunden01[[ Reeller_Kunde ]] <- factor( Kunden01[[ Reeller_Kunde ]], levels=c(1,2), labels= c("NICHT kaufend", "kaufend") ) } str(Kunden01) This way a new variable is created by building it from a string concatenation. I also like the cat() function to document the process within the loop while running the program. Many thanks for your help. Kind regards Georg Von: G.Maubach at gmx.de An: g.maubach at weinwolf.de, Datum: 25.04.2016 21:37 Betreff: Fw: Re: [R] Creating variables on the fly> Gesendet: Montag, 25. April 2016 um 19:35 Uhr > Von: "MacQueen, Don" <macqueen1 at llnl.gov> > An: "G.Maubach at gmx.de" <G.Maubach at gmx.de>, "r-help at r-project.org"<r-help at r-project.org>> Betreff: Re: [R] Creating variables on the fly > > I'm going to assume that Kunden is a data frame, and it has columns > (variables) with names like > Umstatz_2011 > and that you want to create new columns with names like > Kunde_real_2011 > > If that is so, then try this (not tested): > > for (year in 2011:2015) { > nmK <- paste0("Kunde_real_", year) > nmU <- paste0("Umsatz_", year) > cat('Creating',nmK,'from',nmU,'\n') > Kunden[[ nmK ]] <- ifelse( Kunden[[ nmU ]] <= 0, 1, 2) > Kunden[[ nmK ]] <- factor( Kunden[[ nmK ]], > levels=c(1,2), > labels= c("NICHT kaufend", "kaufend") > ) > > } > > This little example should illustrate the method: > > > > foo <- data.frame(a=1:4) > > foo > a > 1 1 > 2 2 > 3 3 > 4 4 > > foo[['b']] <- foo[['a']]*3 > > foo > a b > 1 1 3 > 2 2 6 > 3 3 9 > 4 4 12 > > > > -- > Don MacQueen > > Lawrence Livermore National Laboratory > 7000 East Ave., L-627 > Livermore, CA 94550 > 925-423-1062 > > > > > > On 4/22/16, 8:52 AM, "R-help on behalf of G.Maubach at gmx.de" > <r-help-bounces at r-project.org on behalf of G.Maubach at gmx.de> wrote: > > >Hi all, > > > >I would like to use a loop for tasks that occurs repeatedly: > > > ># Groups > ># Umsatz <= 0: 1 (NICHT kaufend) > ># Umsatz > 0: 2 (kaufend) > >for (year in c("2011", "2012", "2013", "2014", "2015")) { > > paste0("Kunden$Kunde_real_", year) <- (paste0("Kunden$Umsatz_", year) > ><= 0) * 1 + > > (paste0("Kunden$Umsatz_", year) > > > 0) * 2 > > paste0("Kunden$Kunde_real_", year) <- factor(paste0("Kunden$Umsatz_", > >year), > > levels = c(1, 2), > > labels = c("NICHT > >kaufend", "kaufend")) > > } > > > >This actually does not work due to the fact that the expression > >"paste0("Kunden$Kunde_real_", year)" ist not interpreted as a variable > >name by the R script language interpreter. > > > >Is there a way to assembly variable names on the fly in R? > > > >Regards > > > >Georg > > > >______________________________________________ > >R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > >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. > >
Maybe Matching Threads
- Antwort: Fw: Re: Creating variables on the fly (SOLVED)
- Interdependencies of variable types, logical expressions and NA
- Interdependencies of variable types, logical expressions and NA
- Antwort: RE: Interdependencies of variable types, logical expressions and NA
- Merging Data Sets with Full Outer Join