[R] nested for loop with data table
Ek Esawi
esawiek at gmail.com
Wed May 3 17:17:21 CEST 2017
Thank you both Boris and Jim. Thank you, Boris, for advising to read the
posting guide; I had and I just did.
Jim’s idea is exactly what I want; however, I could not pass sset1, sset2,
etc. to the j nested loop and collect the results in an vector.
Here attached my code, file, and my question which should be clear now. The
question again is instead of using separate loops for each sset1 and sset2,
I want one nested loop? Because I have at least 10 subsets
(sset1,sset2,sset3…..sset10).
Thanks again, EK
-------The code------
install.packages("data.table")
library(data.table)
File1 <- "C:/Users/SampleData.csv"
DT <- fread(File1)
sset1 <- DT[Num<10&Day<10]
sset2 <- DT[Num>10&Day<15]
# Count how many combinations of A,B,C,D,E,F in each subset
for ( i in 1:length(sset1)){
aa <- c(sset1[Grade=="A",.N],sset1[Grade=="D",.N])
bb <- c(sset1[Grade=="B",.N],sset1[Grade=="F",.N])
cc <- c(sset1[Grade=="C",.N],sset1[Grade=="A",.N])
counts <- c(aa, bb,cc)
}
for ( i in 1:length(sset2)){
aa1 <- c(sset2[Grade=="A",.N],sset2[Grade=="D",.N])
bb1 <- c(sset2[Grade=="B",.N],sset2[Grade=="F",.N])
cc1 <- c(sset2[Grade=="C",.N],sset2[Grade=="A",.N])
counts <- c(aa1,bb1,cc1)
}
-----------The File------------
Num Color Grade Value Month Day
1: 1 yellow A 20 May 1
2: 2 green B 25 June 2
3: 3 green A 10 April 3
4: 4 black A 17 August 3
5: 5 red C 5 December 5
6: 6 orange D 0 January 13
7: 7 orange E 12 January 5
8: 8 orange F 11 February 8
9: 9 orange F 99 July 23
10: 10 orange F 70 May 7
11: 11 black A 77 June 11
12: 12 green B 87 April 33
13: 13 black A 79 August 9
14: 14 green A 68 December 14
15: 15 black C 90 January 31
16: 16 green D 79 January 11
17: 17 black E 101 February 17
18: 18 red F 90 July 21
19: 19 red F 112 February 13
20: 20 red F 101 July 20
On Tue, May 2, 2017 at 12:35 PM, Ek Esawi <esawiek at gmail.com> wrote:
> I have a huge data file; a sample is listed below. I am using the package
> data table to process the file and I am stuck on one issue and need some
> feedback. I used fread to create a data table. Then I divided the data
> table (named File1) into 10 general subsets using common table commands
> such as:
>
>
>
> AAA <- File1[Num<5&day>15]
>
> BBB <- File1[Num>15&day<10]
>
> …..
>
> …..
>
> …..
>
> …..
>
> …..
>
> …..
>
>
>
> I wanted to divide and count each of the above subsets based on a set of
> parameters common to all subsets. I did the following to go through each
> subset and it works:
>
> For (I in 1: length (AAA)) {
>
> aa <- c(AAA[color==”green”&grade==”a”,month==”Januray”
> .N],[ AAA[color==”green”&grade==”b”& month==”June”’ .N])
>
> }
>
>
>
> The question: I don’t want to have a separate loop for each subset (10
> loops). Instead, I was hoping to have 2 nested loops in the form below:
>
>
>
> For (I in 1:N)){
>
> For (j in 1:M){
>
>
>
> }
>
> }
>
>
>
> Sample
>
>
> Num
>
> Color
>
> Grade
>
> Value
>
> Month
>
> Day
>
> 1
>
> yellow
>
> A
>
> 20
>
> May
>
> 1
>
> 2
>
> green
>
> B
>
> 25
>
> June
>
> 2
>
> 3
>
> green
>
> A
>
> 10
>
> April
>
> 3
>
> 4
>
> black
>
> A
>
> 17
>
> August
>
> 3
>
> 5
>
> red
>
> C
>
> 5
>
> December
>
> 5
>
> 6
>
> orange
>
> D
>
> 0
>
> January
>
> 13
>
> 7
>
> orange
>
> E
>
> 12
>
> January
>
> 5
>
> 8
>
> orange
>
> F
>
> 11
>
> February
>
> 8
>
> 9
>
> orange
>
> F
>
> 99
>
> July
>
> 23
>
> 10
>
> orange
>
> F
>
> 70
>
> May
>
> 7
>
> 11
>
> black
>
> A
>
> 77
>
> June
>
> 11
>
> 12
>
> green
>
> B
>
> 87
>
> April
>
> 33
>
> 13
>
> black
>
> A
>
> 79
>
> August
>
> 9
>
> 14
>
> green
>
> A
>
> 68
>
> December
>
> 14
>
> 15
>
> black
>
> C
>
> 90
>
> January
>
> 31
>
> 16
>
> green
>
> D
>
> 79
>
> January
>
> 11
>
> 17
>
> black
>
> E
>
> 101
>
> February
>
> 17
>
> 18
>
> red
>
> F
>
> 90
>
> July
>
> 21
>
> 19
>
> red
>
> F
>
> 112
>
> February
>
> 13
>
> 20
>
> red
>
> F
>
> 101
>
> July
>
> 20
>
>
>
[[alternative HTML version deleted]]
More information about the R-help
mailing list