[R] How to replace a column in a data frame with another one with a different size
Michael Weylandt
michael.weylandt at gmail.com
Sun Jul 8 19:10:08 CEST 2012
On Jul 8, 2012, at 9:31 AM, Stathis Kamperis <ekamperi at gmail.com> wrote:
> Hello everyone,
>
> I have a dataframe with 1 column and I'd like to replace that column
> with a moving average.
> Example:
>
>> library('zoo')
>> mydat <- seq_len(10)
>> mydat
> [1] 1 2 3 4 5 6 7 8 9 10
>> df <- data.frame("V1" = mydat)
>> df
> V1
> 1 1
> 2 2
> 3 3
> 4 4
> 5 5
> 6 6
> 7 7
> 8 8
> 9 9
> 10 10
>> df[df$V1 <- rollapply(df$V1, 3, mean)]
> Error in `$<-.data.frame`(`*tmp*`, "V1", value = c(2, 3, 4, 5, 6, 7, 8, :
> replacement has 8 rows, data has 10
>>
>
I'm not sure you need the outer df[...] -- I think you just want
df$V1 <- rollapply(df$V1,3,mean)
However, this will still give you the error message you're seeing because rollapply() only returns 8 values here (you don't get the "endpoints" by default). To get the right number of rows, you want
rollapply(df$V1, 3, mean, fill = NA) # Change NA if desired
which will put NA's on each end and give you a length 10 result, as needed.
Best,
Michael
> I could use a temporary variable to store the results of rollapply()
> and then reconstruct the data frame, but I was wondering if there is a
> one-liner that can achieve the same thing.
>
> Best regards,
> Stathis
>
> P.S. If you don't mind, cc me at your reply because I'm not subscribed
> to the list (but I will check the archive anyway).
>
> ______________________________________________
> R-help at r-project.org 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