[R] add an idx column to the matrix

Lida Zeighami lid.zigh at gmail.com
Wed Aug 12 20:23:31 CEST 2015


Thanks Sarah,

I use your code in a loop, so each time I have different matrix, means
lofGT_met changed each time!
some times I have just one column in matrix so my matrix will be n*1 (the
number of rows is the same =n)
do you think it cause the error?


On Wed, Aug 12, 2015 at 1:12 PM, Sarah Goslee <sarah.goslee at gmail.com>
wrote:

> On Wed, Aug 12, 2015 at 2:04 PM, Lida Zeighami <lid.zigh at gmail.com> wrote:
> > I applied this code in a loop function but since in some matrices there
> > isn't any 2, so I got the below error:
> >
> > idx<- apply(lofGT_met,1, function(x)as.numeric(any(x==2 & !is.na(x))))
> >
> >
> > Error in apply(lofGT_met, 1, function(x){(any(x == 2)}) :
> >   dim(X) must have a positive length
>
> That has nothing to do with whether there are any values of 2 in the
> data frame. The code I suggested can handle that:
>
>
> no2 <- structure(list(X125 = c(0L, 1L, 1L, 0L, 1L), X255 = c(1L, 1L,
>  1L, 1L, 0L), X558 = c(0L, 0L, 1L, 0L, 0L), X2366 = c(NA, NA,
>  1L, NA, 0L), X177 = c(0L, 0L, 0L, 0L, 0L), X255.1 = c(0L, 1L,
>  0L, 0L, 0L)), .Names = c("X125", "X255", "X558", "X2366", "X177",
>  "X255.1"), class = "data.frame", row.names = c("aa", "bb", "cs",
>  "de", "gh"))
>
> no2
> apply(no2, 1, function(x)as.numeric(any(x == 2 & !is.na(x))))
>
>
> > no2
>    X125 X255 X558 X2366 X177 X255.1
> aa    0    1    0    NA    0      0
> bb    1    1    0    NA    0      1
> cs    1    1    1     1    0      0
> de    0    1    0    NA    0      0
> gh    1    0    0     0    0      0
> > apply(no2, 1, function(x)as.numeric(any(x == 2 & !is.na(x))))
> aa bb cs de gh
>  0  0  0  0  0
>
> It also works for rows that are entirely NA. Thus, I'm forced to
> conclude that there's something odd about lofGT_met, and you'll need
> to provide more information about that data frame, and a reproducible
> example, for a solution to be offered.
>
> Sarah
>
>
> >
> > would you please let me know how to correct it?
> > Thanks
> >
> > On Mon, Aug 10, 2015 at 3:27 PM, Sarah Goslee <sarah.goslee at gmail.com>
> > wrote:
> >>
> >> Easy enough (note that your column names are problematic, though)
> >>
> >> > mydata <- structure(list(X125 = c(0L, 1L, 2L, 0L, 2L), X255 = c(1L,
> 1L,
> >> + 1L, 1L, 0L), X558 = c(0L, 0L, 2L, 0L, 0L), X2366 = c(NA, NA,
> >> + 1L, NA, 0L), X177 = c(0L, 0L, 0L, 0L, 0L), X255.1 = c(0L, 1L,
> >> + 0L, 0L, 0L)), .Names = c("X125", "X255", "X558", "X2366", "X177",
> >> + "X255.1"), class = "data.frame", row.names = c("aa", "bb", "cs",
> >> + "de", "gh"))
> >> > mydata$idx <- apply(mydata, 1, function(x)as.numeric(any(x == 2 &
> >> > !is.na(x))))
> >> > mydata
> >>    X125 X255 X558 X2366 X177 X255.1 idx
> >> aa    0    1    0    NA    0      0   0
> >> bb    1    1    0    NA    0      1   0
> >> cs    2    1    2     1      0      0   1
> >> de    0    1    0    NA    0      0   0
> >> gh    2    0    0     0      0      0   1
> >>
> >> Sarah
> >>
> >> On Mon, Aug 10, 2015 at 4:11 PM, Lida Zeighami <lid.zigh at gmail.com>
> wrote:
> >>>
> >>> Hi there,
> >>>
> >>> I have a matrix contain 0,1,2, NA elements.
> >>> I want to add a column to this matrix with name of "idx" . then for
> each
> >>> row, I should put 1 in this column (idx) if there is at least one 2 in
> >>> that
> >>> row otherwise I should put 0 in this column!
> >>>
> >>> for example  mydata:
> >>>
> >>>        125   255   558   2366   177    255
> >>> aa    0        1       0         NA    0         0
> >>> bb    1        1       0         NA    0         1
> >>> cs     2        1       2         1       0         0
> >>> de    0        1       0         NA    0         0
> >>> gh    2       0       0         0        0         0
> >>>
> >>>
> >>> my output should be:
> >>>
> >>>
> >>>        125   255   558   2366   177    255    idx
> >>> aa    0        1       0         NA    0         0      0
> >>> bb    1        1       0         NA    0         1      0
> >>> cs     2        1       2         1       0         0     1
> >>> de    0        1       0         NA    0         0      0
> >>> gh    2       0       0        2        0         2       1
> >>>
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list