[R] Odp: How to merge a matrix and a dataframe with different types of columns
Petr PIKAL
petr.pikal at precheza.cz
Mon Jul 25 18:23:15 CEST 2011
Hi
> [R] How to merge a matrix and a dataframe with different types of
columns
>
> Hi,
>
>
>
> I hope someone can help here. I have been scratching my head for many
> hours, trying to find out how to merge two datasets that were created by
> different means. The initial miniMarket contains dates without
> discontinuities (weekends). This matrix was created using seq and has a
> character nature right now.
>
>
>
> > miniMarket
>
> [1] "2011-07-22" "2011-07-21" "2011-07-20" "2011-07-19" "2011-07-18"
> "2011-07-17" "2011-07-16" "2011-07-15"
>
> [9] "2011-07-14" "2011-07-13" "2011-07-12" "2011-07-11" "2011-07-10"
> "2011-07-09" "2011-07-08" "2011-07-07"
>
> [17] "2011-07-06" "2011-07-05" "2011-07-04" "2011-07-03"
>
Hm. You are not telling the whole story
typeof(seq(as.Date(Sys.time())-100, as.Date(Sys.time()),10) )
[1] "double"
str(seq(as.Date(Sys.time())-100, as.Date(Sys.time()),10) )
Date[1:11], format: "2011-04-16" "2011-04-26" "2011-05-06" "2011-05-16"
...
>
>
> > typeof(miniMarket)
>
> [1] "character"
>
Anyway, you can change it to date by as.Date function.
>
>
> The miniTechies dataframe was the resulted of a sql query and had a
double
> nature (typeof), despite of being presented as a date
>
>
>
<snip>
>
> When I try to merge them by the dates, I fail
>
> > mergedM <- as.matrix(merge(miniMarket,miniTechies[,2],by=1,all=TRUE))
Why as.matrix? this transforms it to matrix which needs to have the same
type of data so R tries it best to transform everithing to suit this
condition.
what do you mean by=1
By my opinion you need
Convert both sets to data frame and for further operation to name the
columns you want to merge by with the same name.
Transform values in both common columns to the same type of data, in your
case most probably by as.Date
do
mergedM <- merge(df1, df2, all=T)
Regards
Petr
BTW I needed to look at merge help page and the same should do you.
>
> Warning message:
>
> In `[<-.factor`(`*tmp*`, ri, value = c(20L, 19L, 18L, 17L, 16L, :
>
> invalid factor level, NAs generated
>
>
>
> > mergedM
>
> x
>
> [1,] "2011-07-03"
>
> [2,] "2011-07-04"
>
> [3,] "2011-07-05"
>
> [4,] "2011-07-06"
>
> [5,] "2011-07-07"
>
> [6,] "2011-07-08"
>
> [7,] "2011-07-09"
>
> [8,] "2011-07-10"
>
> [9,] "2011-07-11"
>
> [10,] "2011-07-12"
>
> [11,] "2011-07-13"
>
> [12,] "2011-07-14"
>
> [13,] "2011-07-15"
>
> [14,] "2011-07-16"
>
> [15,] "2011-07-17"
>
> [16,] "2011-07-18"
>
> [17,] "2011-07-19"
>
> [18,] "2011-07-20"
>
> [19,] "2011-07-21"
>
> [20,] "2011-07-22"
>
> [21,] NA
>
> [22,] NA
>
> [23,] NA
>
> [24,] NA
>
> [25,] NA
>
>
>
> I didn't try to reproduce the means to create these datasets because I
don't
> really understand how the Date is being represented in the miniTechies
> dataframe.
>
>
>
> Could anyone provide me some hint on how to merge these datasets. What I
> want is a dataset with all dates and not only dates for which there is
data
> on the miniTechies dataframe.
>
>
>
> Thanks,
>
>
>
> Marco
>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> 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