[R] Replacing value with "1"
Richard M. Heiberger
rmh at temple.edu
Fri Sep 30 06:32:43 CEST 2016
I got the matrix time down by another factor of 4
tmp <- matrix(c(0,0,1,0,0,
NA,0,1,1,0,
0,1,0,0,NA,
1,0,1,0,1), ## last item in row has value 1
byrow=TRUE, 4, 5)
## Jeff matrix
DF2 <- DF <- tmp
DF2[ , -1 ] <- ifelse( !is.na( DF[ , -ncol( DF ) ] )
& 1 == DF[ , -ncol( DF ) ]
, 1
, DF[ , -1 ]
)
DF2
##
system.time( for (i in 1:1000) {
DF2[ , -1 ] <- ifelse( !is.na( DF[ , -ncol( DF ) ] )
& 1 == DF[ , -ncol( DF ) ]
, 1
, DF[ , -1 ]
)
})
## user system elapsed
## 0.027 0.001 0.029
## rmh matrix
DF <- tmp
DF[,-1][(DF[,-ncol(DF)] == 1)] <- 1
DF
##
system.time( for (i in 1:1000) {
DF[,-1][(DF[,-ncol(DF)] == 1)] <- 1
})
## user system elapsed
## 0.007 0.000 0.006
On Fri, Sep 23, 2016 at 12:25 PM, Jeff Newmiller
<jdnewmil at dcn.davis.ca.us> wrote:
> Another approach using in-place replacement and thinking with matrix
> operations instead of vector operations:
>
> DF <- matrix( c( 0, 0, 1, 0, 0
> , NA, 0, 1, 1, 0
> , 0, 1, 0, 0, NA )
> , byrow=TRUE
> , nrow=3 )
> DF2 <- DF
> DF2[ , -1 ] <- ifelse( !is.na( DF[ , -ncol( DF ) ] )
> & 1 == DF[ , -ncol( DF ) ]
> , 1
> , DF[ , -1 ]
> )
>
>
> On Thu, 22 Sep 2016, Henrik Bengtsson wrote:
>
>> which(df == 1, arr.ind=TRUE) is useful here:
>>
>>> df <- matrix(c(0,NA,0,0,0,1,1,1,0,0,1,0,0,0,NA), nrow=3)
>>> df
>>
>> [,1] [,2] [,3] [,4] [,5]
>> [1,] 0 0 1 0 0
>> [2,] NA 0 1 1 0
>> [3,] 0 1 0 0 NA
>>
>>> ## Identify (row,col) indices for 1:s
>>> idxs <- which(df == 1, arr.ind=TRUE)
>>> idxs
>>
>> row col
>> [1,] 3 2
>> [2,] 1 3
>> [3,] 2 3
>> [4,] 2 4
>>
>>> ## Drop any in the last column
>>> idxs <- idxs[idxs[,"col"] < ncol(df), , drop=FALSE]
>>> idxs
>>
>> row col
>> [1,] 3 2
>> [2,] 1 3
>> [3,] 2 3
>> [4,] 2 4
>>
>>> idxs[,"col"] <- idxs[,"col"] + 1L
>>> idxs
>>
>> row col
>> [1,] 3 3
>> [2,] 1 4
>> [3,] 2 4
>> [4,] 2 5
>>
>>> df[idxs] <- 1
>>> df
>>
>> [,1] [,2] [,3] [,4] [,5]
>> [1,] 0 0 1 1 0
>> [2,] NA 0 1 1 1
>> [3,] 0 1 1 0 NA
>>
>> /Henrik
>>
>> On Thu, Sep 22, 2016 at 8:13 PM, Jim Lemon <drjimlemon at gmail.com> wrote:
>>>
>>> Hi Saba,
>>> Try this:
>>>
>>> df<-matrix(c(0,NA,0,0,0,1,1,1,0,0,1,0,0,0,NA),nrow=3)
>>> dimdf<-dim(df)
>>> df1<-df==1
>>> df[cbind(rep(FALSE,dimdf[1]),df1[,-dimdf[2]])]<-1
>>>
>>> Jim
>>>
>>>
>>>
>>> On Fri, Sep 23, 2016 at 12:27 PM, Saba Sehrish via R-help
>>> <r-help at r-project.org> wrote:
>>>>
>>>> Hi
>>>>
>>>> I have a matrix that contains 1565 rows and 132 columns. All the
>>>> observations are either "0" or "1". Now I want to keep all the observations
>>>> same but just one change, i.e. whenever there is "1", the very next value in
>>>> the same row should become "1". Please see below as a sample:
>>>>
>>>>> df
>>>>
>>>>
>>>> 0 0 1 0 0
>>>> NA 0 1 1 0
>>>> 0 1 0 0 NA
>>>>
>>>> What I want is:
>>>>
>>>>
>>>> 0 0 1 1 0
>>>> NA 0 1 1 1
>>>> 0 1 1 0 NA
>>>>
>>>>
>>>>
>>>> I shall be thankful for the reply.
>>>>
>>>>
>>>> Saba
>>>>
>>>> ______________________________________________
>>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>> PLEASE do read the posting guide
>>>> http://www.R-project.org/posting-guide.html
>>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>
>>
>> ______________________________________________
>> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
> ---------------------------------------------------------------------------
> Jeff Newmiller The ..... ..... Go Live...
> DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go...
> Live: OO#.. Dead: OO#.. Playing
> Research Engineer (Solar/Batteries O.O#. #.O#. with
> /Software/Embedded Controllers) .OO#. .OO#. rocks...1k
>
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list