I have a data frame with 10 columns: A:J and I want to have the output as a data frame with 11 columns, the value of 11th column is£º for each row, if any column can be divided by 13, then the 11th column has a values of 1, otherwise, it has a value of 0. How to do that? input is a=matrix(1:10000,1000,10) dimnames(a)=list(NULL,LETTERS[1:10]) [[alternative HTML version deleted]]
On Sun, Jan 16, 2011 at 03:01:49PM +0800, r-help wrote:> I have a data frame with 10 columns: A:J and I want to have the output as a data frame with 11 columns, the value of 11th column is?? > > > for each row, if any column can be divided by 13, then the 11th column has a values of 1, otherwise, it has a value of 0. How to do that? > > > input is > > a=matrix(1:10000,1000,10) > > dimnames(a)=list(NULL,LETTERS[1:10])For a general matrix "a", this can be done, for example x <- rowSums(a %% 13 == 0) b <- cbind(a, x) If the residues in the columns are periodic, like in the example above, then also the vector x is periodic. If this really occurs in the application, generating the new column using this fact may also be useful. The "length.out" argument of rep() can be used. y <- rep(rowSums(a[1:13, ] %% 13 == 0), length=1000) identical(x, y) # [1] TRUE Petr Savicky.
On Sun, Jan 16, 2011 at 03:01:49PM +0800, r-help wrote:> I have a data frame with 10 columns: A:J and I want to have the output as a data frame with 11 columns, the value of 11th column is?? > > > for each row, if any column can be divided by 13, then the 11th column has a values of 1, otherwise, it has a value of 0. How to do that? > > > input is > > a=matrix(1:10000,1000,10) > > dimnames(a)=list(NULL,LETTERS[1:10])I am sorry for an error in the previous solution for a general matrix. It should be, for example x <- as.numeric(rowSums(a %% 13 == 0) != 0) b <- cbind(a, x) or x <- (rowSums(a %% 13 == 0) != 0) + 0 Petr Savicky.