[R] Loop
Matevž Pavlič
matevz.pavlic at gi-zrmk.si
Fri Nov 5 00:05:00 CET 2010
Hi Jim,
Actually, this is better, but both values are what i am looking for. Count and the value of the count.
Is there a way to just paste those two together?
Thanks, m
-----Original Message-----
From: jim holtman [mailto:jholtman at gmail.com]
Sent: Thursday, November 04, 2010 9:59 PM
To: Matevž Pavlič
Cc: Petr PIKAL; r-help at r-project.org
Subject: Re: [R] Loop
Is this closer to what you want, assuming that it is the value of the most frequently occurring:
> apply(mat, 2, function(x) head(names(sort(table(x), decreasing=T)),5))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] "1" "14" "5" "1" "4" "14" "6" "18" "11" "19"
[2,] "3" "3" "13" "12" "3" "11" "14" "9" "18" "12"
[3,] "2" "18" "20" "8" "11" "12" "17" "14" "14" "7"
[4,] "5" "11" "8" "19" "5" "18" "18" "15" "16" "10"
[5,] "18" "13" "11" "11" "17" "3" "4" "16" "8" "16"
>
2010/11/4 Matevž Pavlič <matevz.pavlic at gi-zrmk.si>:
> Hi again,
>
> Stil don't qute get it...
>
> Here's what i did :
>
>>mat<-read.csv("litologija.csv", dec=".", sep=";") apply(mat, 2,
>>function(x) head(sort(table(x),decreasing=T),10))
>
> With that i get a table(list/matrix...) which gives the highest count
> of occurances of each value in a table (at least i think so) But the problem is because it does not tell which value occurs the most (has the highest count).
>
> If written like this :
>>apply(mat, 2, function(x) sort(table(x),decreasing=T))
>
>
> I get decreasingly sorted values of counts of occurances of a specific field and the value of that field for each column:
>
>
> $W2
> x
> PEŠČEN GRADUIRAN IN PROD
> DO GLINAST PROD, PREPEREL MELJAST
> GRUŠČ GLINA Z MALO GRANULIRANA
> 1872 1542 552 519
> 458 214 175 174 132
> 114 62 53 47 45
> ZELO PEŠČENA ZAGLINJEN KARBONATNI
> SKRILAVCA, S SKRILAVCA GRANULIRAN
> PEČŠEN VEZAN ZAOBLJEN GR. DROBEN
> SLABO
> 40 34 31 26
> 26 25 25 24 17
> 17 17 15 12 12
> GRUŠČ, MELJASTO PEŠEEN DOBRO GRAN. PEŠČENJAKA HUDOURNIŠKI MELJNA PEŠČN GIRADUIRAN GLINAST, GOST GRADUTRAN GRANUL.
> 11 11 11 10
> 10 9 8 8 8
> 6 6 6 6 6
> PESEK ZAMELJEN GRADUIPAN PREPEPEL
> PŠČEN GPADUIRAN GRADUIRAN, GRADURAN POTOČNI
> PREPERL SAVSKI CONA GLINASTEGA
> GRADUIRN
> 6 6 5 5
> 5 4 4 4 4
> 4 4 3 3 3
> MELJAST, PEČEN PEŠČEN, PLASTI
> DELNO GLINA, GLINASTO GRADUIAN GRADULRAN
> GRDUIRAN GRUŠČ. KARB. KONGLOMERAT
> 3 3 3 3
> 2 2 2 2 2
> 2 2 2 2 2
> KONGLOMERAT, MELJ NEKOLIKO OKER
> PESEK, PEŠČCEN PEŠČEN. PLASTEH POD
> PPEPEREL RPOD UMAZAN ZAOBLJEN,
> -
> 2 2 2 2
> 2 2 2 2 2
> 2 2 2 2 1
> (GRUŠČ) (KARBONATNI) APNENCA DROBNOZRNAT,
> ENAKOMEREN GBADUIRAN GLIANAST GLINASTA
> GPADUIRALN GPUŠČ GRADAUIRAN GRADUIRA
> GRADUIRANPEŠČEN GRADUIRAU
>
>
> But the first code somhove looses the acutal value of the field and
> just gives the count
>>apply(mat, 2, function(x) head(sort(table(x),decreasing=T),10))
>
> VrtinaID ZapStev GlobinaOd GlobinaDo USCS Opis W1 W2 W3 W4
> W5 W6 W7 W8 W9 W10 W11 W12 W13 W14 W15
> [1,] 15 1248 282 290 2131 15 1820 1872 1677
> 1479 1441 1465 1261 769 848 1088 1490 1968 2459 2943 3408
> [2,] 11 1119 198 235 1305 13 1791 1542 1495
> 1334 1317 1247 829 652 783 660 606 603 381 381 301
> [3,] 11 1078 174 210 784 11 532 552 566
> 529 532 716 511 575 576 416 464 384 368 282 279
> [4,] 11 835 147 173 691 11 471 519 390
> 351 358 571 364 521 556 381 398 352 287 282 259
> [5,] 10 584 133 172 646 11 376 458 296
> 311 323 195 252 329 429 343 397 336 244 242 224
> [6,] 10 389 123 142 386 10 253 214 237
> 268 310 130 233 265 376 263 378 258 228 210 205
> [7,] 10 257 114 130 183 10 247 175 201
> 242 157 130 179 258 267 219 230 239 197 185 155
> [8,] 9 198 105 126 148 9 135 174 157
> 170 146 102 163 213 266 215 221 188 197 179 155
> [9,] 9 171 101 95 71 9 102 132 139
> 161 141 89 145 199 140 192 205 168 191 160 122 [10,]
> 9 144 94 91 31 8 93 114 124 158 121 84
> 136 183 134 185 160 158 181 155 115
>
>
> How would i get the count and the actual value of the field in the same table so that it would look something like this :
> VrtinaID.count VrtinaID.value ZapStev.count ZapStev.value
> [1,] 15 V-1 1248 ena ...
> [2,] 11 V-12 1119 dva ...
> .
> .
> .
>
> Hope that explains it and thanks for help,
>
> m
>
> .
> str(w)
>
> -----Original Message-----
> From: Petr PIKAL [mailto:petr.pikal at precheza.cz]
> Sent: Thursday, November 04, 2010 4:56 PM
> To: Matevž Pavlič
> Cc: r-help at r-project.org
> Subject: Re: [R] Loop
>
> Hi
>
> r-help-bounces at r-project.org napsal dne 04.11.2010 15:49:31:
>
>> Hi all,
>>
>> I understand that you most of you this is a peice of cake but i am a
> complete
>> newbie in this....so any example would be greatly aprpeciated and
>> also
> any
>> hint as how to get around in R. Frankly i sometimes see the help
>> files
> kinda confusing.
>
> OK. Instead of
>> > >> w1<-table(lit$W1)
>> > >> w1<-as.data.frame(w1)
>> > >> write.table(w1,file="w1.csv",sep=";",row.names=T, dec=".")
>> > >> w1<- w1[order(w1$Freq, decreasing=TRUE),] w1<-head(w1, 20)
>
> Suppose you have data frame or matrix, and you want to have 5 most
> common values from each column
>
> # prepare matrix
> x<-sample(1:20, 1000000, replace=T)
> mat<-matrix(x, ncol=10)
>
> #apply user defined function for each column apply(mat, 2, function(x)
> head(sort(table(x), decreasing=T),5))
> [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 5091 5135
> 5174 5133 5199 5097 5165 5157 5134 5068 [2,] 5073 5111 5143 5064 5113
> 5078 5102 5157 5131 5065 [3,] 5058 5092 5115 5051 5079 5064 5088 5128
> 5076 5063 [4,] 5056 5073 5114 5047 5059 5044 5037 5064 5071 5063
> [5,] 5047 5064 5072 5041 5057 5041 5035 5058 5032 5061
>
> If you want to do it in loop (can be quicker sometimes) and save it to
> list make a list
>
> lll<-vector("list", 10)
>
> and fill it with your results
>
> for (i in 1:10) lll[[i]]<-head(sort(table(mat[,i]), decreasing=T),5)
>
> and now you can call values from this lll list simply by
>
> lll[5]
> [[1]]
>
> 9 15 13 6 16
> 5199 5113 5079 5059 5057
>
> lll[[5]]
>
> 9 15 13 6 16
> 5199 5113 5079 5059 5057
>
> or even
>
> lll[[5]][3]
> 13
> 5079
>
> without need for writing to individual files pasting together letters
> and numbers etc.
>
> There shall be R-intro document in your installation and it is worth
> reading. It is not so big, you can manage it in less then month if you
> complete more than 3 pages per day.
>
> Regards
> Petr
>
>
>
>>
>> M
>>
>> -----Original Message-----
>> From: Petr PIKAL [mailto:petr.pikal at precheza.cz]
>> Sent: Thursday, November 04, 2010 3:40 PM
>> To: Matevž Pavlič
>> Cc: r-help at r-project.org
>> Subject: Re: [R] Loop
>>
>> Hi
>>
>> r-help-bounces at r-project.org napsal dne 04.11.2010 14:21:38:
>>
>> > Hi David,
>> >
>> > I am still having troubles with that loop ...
>> >
>> > This code gives me (kinda) the name of the column/field in a data
> frame.
>> Filed
>> > names are form W1-W10. But there is a space between W and a number
>> > -->
>> "W 10",
>> > and column (field) names do not contain numbers.
>> >
>> > >for(i in 1:10)
>> > >{
>> > >vari <- paste("W",i)
>> > >}
>> > >vari
>> >
>> > [1] "W 10"
>> >
>> > Now as i understand than i would call different columns to R with
>> >
>> > >w<-lit[[vari]]
>> >
>> > Or am i wrong again?
>> >
>> > Then I would probably need another loop to create the names of the
>> variables
>> > on R, i.e. w1 to w10. Is that a general idea for the procedure?
>>
>> Beware of such loops. Instead of littering your workspace with
> files/objects
>> constructed by some paste(whatever, i) solution you can save results
>> in
> list
>> or data.frame or matrix and simply use basic subsetting procedures or
> lapply/
>> sapply functions.
>>
>> I must say I never used such paste(...) construction yet and I work
>> with
> R for
>> quite a long time.
>>
>> Regards
>> Petr
>>
>>
>> >
>> >
>> > Thank for the help, m
>> >
>> > -----Original Message-----
>> > From: David Winsemius [mailto:dwinsemius at comcast.net]
>> > Sent: Wednesday, November 03, 2010 10:41 PM
>> > To: Matevž Pavlič
>> > Cc: r-help at r-project.org
>> > Subject: Re: [R] Loop
>> >
>> >
>> > On Nov 3, 2010, at 5:03 PM, Matevž Pavlič wrote:
>> >
>> > > Hi,
>> > >
>> > > Thanks for the help and the manuals. Will come very handy i am sure.
>> > >
>> > > But regarding the code i don't hink this is what i
>> > > want....basically
>
>> > > i
>>
>> > > would like to repeat bellow code :
>> > >
>> > > w1<-table(lit$W1)
>> > > w1<-as.data.frame(w1)
>> >
>> > It appears you are not reading for meaning. Burns has advised you
>> > how to
>>
>> > construct column names and use them in your initial steps. The `$`
>> function is
>> > quite limited in comparison to `[[` , so he was showing you a
>> > method
>> that
>> > would be more effective. BTW the as.data.frame step is
>> > unnecessary,
>> since the
>> > first thing write.table does is coerce an object to a data.frame.
>> > The "write.table" name is misleading. It should be
>> > "write.data.frame". You
>> cannot
>> > really write tables with write.table.
>> >
>> > You would also use:
>> >
>> > file=paste(vari, "csv", sep=".") as the file argument to
>> > write.table
>> >
>> > > write.table(w1,file="w1.csv",sep=";",row.names=T, dec=".")
>> >
>> > What are these next actions supposed to do after the file is written?
>> > Are you trying to store a group of related "w" objects that will
>> > later
>> be
>> > indexed in sequence? If so, then a list would make more sense.
>> >
>> > --
>> > David.
>> >
>> > > w1<- w1[order(w1$Freq, decreasing=TRUE),] w1<-head(w1, 20)
>> > >
>> > > 20 times, where W1-20 (capital letters) are the fields in a
>> > > data.frame
>>
>> > > called "lit" and w1-20 are the data.frames being created.
>> > >
>> > > Hope that explains it better,
>> >
>> > > m
>> > >
>> > > -----Original Message-----
>> > > From: Patrick Burns [mailto:pburns at pburns.seanet.com]
>> > > Subject: Re: [R] Loop
>> > >
>> > > If I understand properly, you'll want something like:
>> > >
>> > > lit[["w2"]]
>> > >
>> > > instead of
>> > >
>> > > lit$w2
>> > >
>> > > more accurately:
>> > >
>> > > for(i in 1:20) {
>> > > vari <- paste("w", i)
>> > > lit[[vari]]
>> > >
>> > > ...
>> > > }
>> > >
>> > > The two documents mentioned in my signature may help you.
>> > >
>> > > On 03/11/2010 20:23, Matevž Pavlič wrote:
>> > >> Hi all,
>> > >>
>> > >> I managed to do what i want (with the great help of thi mailing
>> > >> list) manually . Now i would like to automate it. I would
>> > >> probably
>
>> > >> need a for loop for to help me with this...but of course I have
>> > >> no
>
>> > >> idea how to do that in R. Bellow is the code that i would like
>> > >> to be
>>
>> > >> replicated for a number of times (let say 20). I would like to
>> > >> achieve that w1 would change to w2, w3, w4 ... up to w20 and by
>> > >> that
>>
>> > >> create 20 data.frames that I would than bind together with cbind.
>> > >>
>> > >> (i did it like shown bellow -manually)
>> > >>
>> > >> w1<-table(lit$W1)
>> > >> w1<-as.data.frame(w1)
>> > >> write.table(w1,file="w1.csv",sep=";",row.names=T, dec=".")
>> > >> w1<- w1[order(w1$Freq, decreasing=TRUE),] w1<-head(w1, 20)
>> > >>
>> > >> w2<-table(lit$W2)
>> > >>
>> > >> w2<-as.data.frame(w2)
>> > >>
>> > >> write.table(w2,file="w2.csv",sep=";",row.names=T, dec=".")
>> > >>
>> > >> w2<- w2[order(w2$Freq, decreasing=TRUE),]
>> > >>
>> > >> w2<-head(w2, 20)
>> > >> .
>> > >> .
>> > >> .
>> > >>
>> > >> Thanks for the help,m
>> >
>> > >
>> >
>> > David Winsemius, MD
>> > West Hartford, CT
>> >
>> > ______________________________________________
>> > 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.
>>
>> ______________________________________________
>> 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.
>
> ______________________________________________
> 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.
>
--
Jim Holtman
Cincinnati, OH
+1 513 646 9390
What is the problem that you are trying to solve?
More information about the R-help
mailing list