creating a factor
Simon Hosking <simon.hosking at general.monash.edu.au> writes:
I'd like to make a factor with seven 1s and three 2s using the factor() function. That is, 1 1 1 1 1 1 1 2 2 2
factor(rep(1:2, c(7,3)))
I will then bind this factor to the matrix below using cbind.data.frame(). 0.56 0.48 0.22 0.59 0.32 0.64 0.26 0.60 0.25 0.38 0.24 0.45 0.56 0.67 0.78 0.97 0.87 0.79 0.82 0.85
It is not a good idea to use methods like cbind.data.frame directly. Use the generic function cbind instead. The point of having method functions is to be able to choose the method that is appropriate to the data. If you have the matrix shown above stored as a matrix named mat then cbind(factor(rep(1:2, c(7,3))), mat) will work but it will also work if mat is a data frame.
factor(rep(1:2, c(7,3)))
[1] 1 1 1 1 1 1 1 2 2 2 Levels: 1 2
mat = read.table("/tmp/foo.dat")
mat
V1 V2 1 0.56 0.48 2 0.22 0.59 3 0.32 0.64 4 0.26 0.60 5 0.25 0.38 6 0.24 0.45 7 0.56 0.67 8 0.78 0.97 9 0.87 0.79 10 0.82 0.85
str(mat)
`data.frame': 10 obs. of 2 variables: $ V1: num 0.56 0.22 0.32 0.26 0.25 0.24 0.56 0.78 0.87 0.82 $ V2: num 0.48 0.59 0.64 0.6 0.38 0.45 0.67 0.97 0.79 0.85
mm = cbind(factor(rep(1:2, c(7,3))), mat) str(mm)
`data.frame': 10 obs. of 3 variables: $ factor(rep(1:2, c(7, 3))): Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 2 2 2 $ V1 : num 0.56 0.22 0.32 0.26 0.25 0.24 0.56 0.78 0.87 0.82 $ V2 : num 0.48 0.59 0.64 0.6 0.38 0.45 0.67 0.97 0.79 0.85
Douglas Bates bates at stat.wisc.edu Statistics Department 608/262-2598 University of Wisconsin - Madison http://www.stat.wisc.edu/~bates/