Re : A. Mani : Avoiding Loops
On Friday 19 August 2005 11:54, Sean O'Riordain wrote:
Hi, I'm not sure what you actually want from your email (following the posting guide is a good way of helping you explain things to the rest of us in a way we understand - it might even answer your question! I'm only a beginner at R so no doubt one of our expert colleagues will help me...
fred <- data.frame() fred <- edit(fred) fred
A B C D E 1 1 2 X Y 1 2 2 3 G L 1 3 3 1 G L 5
fred[,3]
[1] X G G Levels: G X
fred[fred[,3]=="G",]
A B C D E 2 2 3 G L 1 3 3 1 G L 5 so at this point I can create a new dataframe with column 3 (C) == "G"; either explicitly or implicitly... and if I want to calculate the sum() of column E, then I just say something like...
sum(fred[fred[,3]=="G",][,5])
[1] 6 now naturally being a bit clueless at manipulating stuff in R, I didn't know how to do this before I started... and you guys only get to see the lines that I typed in and got a "successful" result... according to section 6 of the "Introduction to R" manual which comes with R, I could also have said
sum(fred[fred$C=="G",]$E)
[1] 6 Hmmm.... I wonder would it be reasonable to put an example of this type into section 2.7 of the "Introduction to R"? cheers! Sean On 18/08/05, A. Mani <a_mani_sc_gs at vsnl.net> wrote:
Hello,
I want to avoid loops in the following situation. There is a
5-col dataframe with col headers alone. two of the columns are
non-numeric. The problem is to calculate statistics(scores) for each
element of one column. The functions depend on matching in the other
non-numeric column.
A B C E F
1 2 X Y 1
2 3 G L 1
3 1 G L 5
and so on ...30000+ entries.
I need scores for col E entries which depend on conditional implications.
Thanks,
Hello,
Sorry about the incomplete problem. Here is a better version for the
problem: (the measure is not simple)
The data frame is like
col1 col2 col3 col4 col5
<num> <nonum> <nonum> <num> <num>
A B C E F
There are repeated strings in col3, col2.
Problem : Calculate Measure(Ci) = [No. of repeats of Ci *100] + [If (Bi, Ci)
is same as (Bj, Cj) and 6>= Ej - Ei >=3 then add 100 else 10] .
Actually it is to stretched further by adding similar blocks.
How do we use *apply or
something else in the situation ?
In prolog it is extremely easy, but here it is not quite...
A. Mani
Member, Cal. Math. Soc
A. Mani Member, Cal. Math. Soc