I am trying to generate some 2- and 3-way frequency tables. I believe there must be a more efficient way of adding frequencies. Here is a 2-way table example:
# create 10 x 5 zero-cell table
n_row = 10; n_col = 5
row_labs = paste('A', toupper(letters[1:n_row]), sep='')
col_labs = paste('B', toupper(letters[1:n_col]), sep='')
crosstbl = as.table(matrix(0, nrow=n_row, ncol=n_col,
dimnames=list(row_labs, col_labs)))
# populate with some numbers
crosstbl[1,1]= 10
crosstbl[1,2]= 20
crosstbl[1,3]= 30
crosstbl[1,4]= 15
crosstbl[1,5]= 10
for (j in 1:5) {
crosstbl[2,j]=2*crosstbl[1,j]
crosstbl[3,j]=3*crosstbl[1,j]
crosstbl[4,j]=4*crosstbl[1,j]
crosstbl[5,j]=2*crosstbl[1,j]
crosstbl[6,j]=1*crosstbl[1,j]
crosstbl[7,j]=2*crosstbl[1,j]
crosstbl[8,j]=3*crosstbl[1,j]
crosstbl[9,j]=2*crosstbl[1,j]
crosstbl[10,j]=2*crosstbl[1,j]
}
crosstbl[2,5]=200
crosstbl[4,3]=200
crosstbl[7,1]=100
crosstbl[2,3]=200
crosstbl[4,1]=100
crosstbl[7,3]=200
crosstbl[2,2]=100
crosstbl[4,4]=200
crosstbl[7,5]=100
crosstbl
# BA BB BC BD BE
# AA 10 20 30 15 10
# AB 20 100 200 30 200
# AC 30 60 90 45 30
# AD 100 80 200 200 40
# AE 20 40 60 30 20
# AF 10 20 30 15 10
# AG 100 40 200 30 100
# AH 30 60 90 45 30
# AI 20 40 60 30 20
# AJ 20 40 60 30 20
Then, similarly, this would be a 3-way example:
# create 10 x 5 x 3 zero-cell table
n_row = 10; n_col = 5; n_slice = 3
row_labs = paste('A', toupper(letters[1:n_row]), sep='')
col_labs = paste('B', toupper(letters[1:n_col]), sep='')
slice_labs = paste('S', toupper(letters[1:n_slice]), sep='')
crosstbl = as.table(array(0, dim=c(n_row, n_col, n_slice),
dimnames=list(row_labs, col_labs, slice_labs)))
# populate with some numbers
crosstbl[1,1,1]= 10
crosstbl[1,2,1]= 20
crosstbl[1,3,1]= 30
crosstbl[1,4,1]= 15
crosstbl[1,5,1]= 10
crosstbl[1,1,2]= 20
crosstbl[1,2,2]= 30
crosstbl[1,3,2]= 10
crosstbl[1,4,2]= 10
crosstbl[1,5,2]= 15
crosstbl[1,1,3]= 10
crosstbl[1,2,3]= 10
crosstbl[1,3,3]= 20
crosstbl[1,4,3]= 10
crosstbl[1,5,3]= 10
for (j in 1:5) {
crosstbl[2,j,1]=2*crosstbl[1,j,1]
crosstbl[3,j,1]=3*crosstbl[1,j,1]
crosstbl[4,j,1]=4*crosstbl[1,j,1]
crosstbl[5,j,1]=2*crosstbl[1,j,1]
crosstbl[6,j,1]=1*crosstbl[1,j,1]
crosstbl[7,j,1]=2*crosstbl[1,j,1]
crosstbl[8,j,1]=3*crosstbl[1,j,1]
crosstbl[9,j,1]=2*crosstbl[1,j,1]
crosstbl[10,j,1]=2*crosstbl[1,j,1]
crosstbl[2,j,2]=1*crosstbl[1,j,2]
crosstbl[3,j,2]=2*crosstbl[1,j,2]
crosstbl[4,j,2]=2*crosstbl[1,j,2]
crosstbl[5,j,2]=4*crosstbl[1,j,2]
crosstbl[6,j,2]=3*crosstbl[1,j,2]
crosstbl[7,j,2]=1*crosstbl[1,j,2]
crosstbl[8,j,2]=1*crosstbl[1,j,2]
crosstbl[9,j,2]=3*crosstbl[1,j,2]
crosstbl[10,j,2]=2*crosstbl[1,j,2]
crosstbl[2,j,3]=1*crosstbl[1,j,3]
crosstbl[3,j,3]=1*crosstbl[1,j,3]
crosstbl[4,j,3]=1*crosstbl[1,j,3]
crosstbl[5,j,3]=4*crosstbl[1,j,3]
crosstbl[6,j,3]=4*crosstbl[1,j,3]
crosstbl[7,j,3]=3*crosstbl[1,j,3]
crosstbl[8,j,3]=2*crosstbl[1,j,3]
crosstbl[9,j,3]=1*crosstbl[1,j,3]
crosstbl[10,j,3]=1*crosstbl[1,j,3]
}
crosstbl[2,5,1]=200
crosstbl[4,3,1]=200
crosstbl[7,1,1]=100
crosstbl[2,3,1]=200
crosstbl[4,1,1]=100
crosstbl[7,3,1]=200
crosstbl[2,2,1]=100
crosstbl[4,4,1]=200
crosstbl[7,5,1]=100
crosstbl[2,5,2]=100
crosstbl[4,3,2]=100
crosstbl[7,1,2]=200
crosstbl[2,3,2]=100
crosstbl[4,1,2]=200
crosstbl[7,3,2]=100
crosstbl[2,2,2]=200
crosstbl[4,4,2]=100
crosstbl[7,5,2]=200
crosstbl[2,5,3]=100
crosstbl[4,3,3]=100
crosstbl[7,1,3]=300
crosstbl[2,3,3]=100
crosstbl[4,1,3]=100
crosstbl[7,3,3]=300
crosstbl[2,2,3]=300
crosstbl[4,4,3]=100
crosstbl[7,5,3]=200
crosstbl
# , , SA
#
# BA BB BC BD BE
# AA 10 20 30 15 10
# AB 20 100 200 30 200
# AC 30 60 90 45 30
# AD 100 80 200 200 40
# AE 20 40 60 30 20
# AF 10 20 30 15 10
# AG 100 40 200 30 100
# AH 30 60 90 45 30
# AI 20 40 60 30 20
# AJ 20 40 60 30 20
#
# , , SB
#
# BA BB BC BD BE
# AA 20 30 10 10 15
# AB 20 200 100 10 100
# AC 40 60 20 20 30
# AD 200 60 100 100 30
# AE 80 120 40 40 60
# AF 60 90 30 30 45
# AG 200 30 100 10 200
# AH 20 30 10 10 15
# AI 60 90 30 30 45
# AJ 40 60 20 20 30
#
# , , SC
#
# BA BB BC BD BE
# AA 10 10 20 10 10
# AB 10 300 100 10 100
# AC 10 10 20 10 10
# AD 100 10 100 100 10
# AE 40 40 80 40 40
# AF 40 40 80 40 40
# AG 300 30 300 30 200
# AH 20 20 40 20 20
# AI 10 10 20 10 10
# AJ 10 10 20 10 10
The populate step seems to me very clumsy/inefficient. Any advice? Thanks!