[R] Loop in variable names
Eik Vettorazzi
E.Vettorazzi at uke.uni-hamburg.de
Fri Feb 11 16:59:56 CET 2011
Hi Stella,
if you just want to print the tables, this should also work
for(i in angus) {
tab <- paste("table", i, sep="")
cut <- paste("P",i, sep = "")
print(table(StoreData$CompanyID, !is.na(StoreData[,cut])))
}
If you want to keep them, your approach works, but you can also store
them in a list
tabs<-list()
for(i in angus) {
tab <- paste("table", i, sep="")
cut <- paste("P",i, sep = "")
tabs[[i]]<-table(StoreData$CompanyID, !is.na(StoreData[,cut]))
}
this produces a list of 5 elements, where only 2 and 5 are populated.
Changing the last line to
tabs[[which(angus==i)]]<-table(StoreData$CompanyID, !is.na(StoreData[,cut]))
produces a list of 2 elements, but the information on "angus" is lost.
best regards
Am 11.02.2011 15:41, schrieb Rita Carreira:
> Thanks so much, that worked well; however, it did not print the tables.
> I went around it and did the following, which worked:
>
> for(i in angus) {
> tab <- paste("table", i, sep="")
> cut <- paste("P",i, sep = "")
> t <- table(StoreData$CompanyID, !is.na(StoreData[,cut]))
> assign(tab,t)
> }
>
> table2
> table5
>
> Is this the only way? Could I not have put table2 and table5 with an i
> index inside the loop?
>
> Sorry to bother you.
> Stella
>
>
>> Date: Wed, 9 Feb 2011 20:15:23 +0100
>> From: E.Vettorazzi at uke.uni-hamburg.de
>> To: ritacarreira at hotmail.com
>> CC: r-help at r-project.org
>> Subject: Re: [R] Loop in variable names
>>
>> Hi Stella,
>> in your coding 'cut' is a string, not a data object.
>>
>> something like
>> cut <- paste("P",i, sep="")
>> table(StoreData$CompanyID, !is.na(StoreData[,cut]))
>>
>> should work.
>>
>> hth.
>>
>> Am 09.02.2011 19:02, schrieb Rita Carreira:
>> >
>> >
>> > Hello!
>> > I would like to do some tables for several variables and I would
> like to write a loop that does the table for each variable. I should
> also point out that my data set has several missing observations and
> sometimes the observations that are missing are not the same for all my
> variables.
>> >
>> > What I would like to do:
>> >
>> > table(StoreData$CompanyID,
>> > !is.na(StoreData$P2))
>> > table(StoreData$CompanyID,
>> > !is.na(StoreData$P5))
>> >
>> > If I run the above code, I get:
>> >
>> >> table(StoreData$CompanyID,
>> > + !is.na(StoreData$P2))
>> >
>> > FALSE TRUE
>> > 2 940 0
>> > 3 0 323
>> > 4 288 0
>> > 5 306 0
>> >
>> >> table(StoreData$CompanyID,
>> > + !is.na(StoreData$P5))
>> >
>> > FALSE TRUE
>> > 2 940 0
>> > 3 0 323
>> > 4 288 0
>> > 5 306 0
>> >
>> >
>> > Here's the loop that I wrote, which does not work:
>> >
>> > angus <- c(2,5)
>> >
>> > for(i in angus) {
>> > cut <- paste("StoreData$P",i, sep="")
>> > table(StoreData$CompanyID, !is.na(cut))
>> > }
>> >
>> > When I run the above, I get the following error message:
>> >
>> > Error in table(StoreData$CompanyID, !is.na(cut)) :
>> > all arguments must have the same length
>> >> source(.trPaths[5], echo=TRUE, max.deparse.length=150)
>> >
>> > Any help is greatly appreciated!
>> > Stella
>> >
>> >
>> >
>> >
>> > [[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.
>>
>>
>> --
>> Eik Vettorazzi
>> Institut für Medizinische Biometrie und Epidemiologie
>> Universitätsklinikum Hamburg-Eppendorf
>>
>> Martinistr. 52
>> 20246 Hamburg
>>
>> T ++49/40/7410-58243
>> F ++49/40/7410-57790
--
Eik Vettorazzi
Institut für Medizinische Biometrie und Epidemiologie
Universitätsklinikum Hamburg-Eppendorf
Martinistr. 52
20246 Hamburg
T ++49/40/7410-58243
F ++49/40/7410-57790
More information about the R-help
mailing list