[R] An apply and rep question

Gabor Grothendieck ggrothendieck at gmail.com
Fri Aug 11 21:01:52 CEST 2006


The approach here is to perform the repetition on the indices (or rownames)
rather than on the data frame directly.  Using the builtin data frame BOD
any of the following would work:

BOD[gl(nrow(BOD), 2),]
BOD[rep(1:nrow(BOD), each = 2),]
BOD[rep(rownames(BOD), each = 2),]

On 8/11/06, Horace Tso <Horace.Tso at pgn.com> wrote:
> Hi list,
>
> I'm sure the explanation must be laughably simple to the experts out
> there, but I just could figure it out. I have a simple data frame that
> looks like,
>
> >head(da.off)
>       DDate  OffP
> 1 2005-01-01 41.23
> 2 2005-01-02 44.86
> 3 2005-01-03 44.86
> 4 2005-01-04 43.01
> 5 2005-01-05 45.47
> 6 2005-01-06 48.62
>
> where the first column DDate currently is character, and OffP is
> numeric.
>
> I want to duplicate every row 2 times, so I thought I use apply(),
>
> x <- apply(da.off, 2, rep, each=2)
>
> The result is a matrix of all character,
>
>  head(x)
>  DDate        OffP
> 1 "2005-01-01" " 41.23"
> 1 "2005-01-01" " 41.23"
> 2 "2005-01-02" " 44.86"
> 2 "2005-01-02" " 44.86"
> 3 "2005-01-03" " 44.86"
> 3 "2005-01-03" " 44.86"
>
> To convert it back to numeric, I did
>
> x <- as.data.frame(x)
> x$OffP <- as.numeric(x$OffP)
>
> However, the OffP column didn't convert correctly, a mystery since they
> "look" quite alright above. (I know, I know, there seems to be a space
> there. But why?)
>
> head(x)
>         DDate OffP
> 1   2005-01-01  150
> 1.1 2005-01-01  150
> 2   2005-01-02  202
> 2.1 2005-01-02  202
> 3   2005-01-03  202
> 3.1 2005-01-03  202
>
> Is this the wrong way to use apply or rep?
>
> Horace
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> 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