This code works for me,
subset(merge(x1, x2, by = c("category", "id"), all = T), select=-id)
category rnorm.10..5..2. rnorm.10..8..2.
1 1 NA 7.810377
2 1 6.493281 9.002411
3 1 6.493281 8.397378
4 1 2.757321 9.002411
5 1 2.757321 8.397378
6 1 5.815198 9.002411
7 1 5.815198 8.397378
8 1 NA 9.289451
9 2 6.653888 12.770012
10 2 6.653888 11.201305
11 2 3.372373 12.770012
12 2 3.372373 11.201305
13 2 3.986016 7.044181
14 2 7.544480 6.238959
15 3 4.540055 NA
16 3 NA 11.282507
17 3 4.181084 NA
18 3 5.973262 NA
19 3 NA 7.413175
On Wed, Jun 17, 2009 at 10:50 PM, Martin Batholdy
<[email protected]>wrote:
> thanks a lot!
> That is really a big help.
>
>
> I tried this code;
>
> x1 <- data.frame(category = sample(3, 10, r=TRUE), rnorm(10, 5, 2))
> x2 <- data.frame(category = sample(3, 10, r=TRUE), rnorm(10, 8, 2))
>
>
> x1$id <- unlist(with(x1, tapply(x1[,2], x1[,1], seq)))
> x2$id <- unlist(with(x2, tapply(x2[,2], x2[,1], seq)))
> subset(merge(x1, x2, by = c("category", "id"), all = T), select = -id)
>
>
> But the code sometimes shows this error message;
>
> Error in `$<-.data.frame`(`*tmp*`, "id", value = c(1L, 2L, 3L, 4L, 5L, :
> replacement has 17 rows, data has 10
>
>
>
>
>
> Am 18.06.2009 um 03:32 schrieb Henrique Dallazuanna:
>
> Yes, try this:
>
> x1$id <- unlist(with(x1, tapply(x, x, seq)))
> x2$id <- unlist(with(x2, tapply(x, x, seq)))
> subset(merge(x1, x2, by = c("x", "id"), all = T), select = -id)
>
> On Wed, Jun 17, 2009 at 10:24 PM, Martin Batholdy <[email protected]
> > wrote:
>
>> Is because the category is not unique, then merge are replicate the
>> values.
>>
>>
>> Yeah, ok.
>> But that is exactly my problem with the actual data set, I don't want
>> "new" rows;
>>
>> If I have;
>>
>> x1
>> 1 4
>> 1 3
>> 1 6
>> 2 9
>> 2 2
>>
>>
>> x2
>> 1 -3
>> 1 -7
>> 2 -3
>> 2 -2
>>
>>
>>
>> I want this data.frame;
>>
>> x1.x2
>> 1 4 -3
>> 1 3 -7
>> 1 6 NA
>> 2 9 -3
>> 2 2 -2
>>
>> or
>>
>> x1.x2
>> 1 4 -3
>> 1 3 -7
>> 2 9 -3
>> 2 2 -2
>>
>>
>>
>>
>> It does not matter to me if the rows are merged like;
>>
>> 1 4 -3
>> 1 3 -7
>>
>> or
>>
>> 1 4 -7
>> 1 3 -3
>>
>>
>>
>>
>> can I also do something like that with merge() ?
>>
>>
>>
>> Am 18.06.2009 um 03:18 schrieb Henrique Dallazuanna:
>>
>> Is because the category is not unique, then merge are replicate the
>> values.
>>
>> Try this example:
>>
>> x <- data.frame(category=1:10, rnorm(10))
>> y <- data.frame(category=3:12, rnorm(10))
>>
>> merge(x, y, by = "category")
>> merge(x, y, by="category", all = T)
>>
>>
>> On Wed, Jun 17, 2009 at 10:04 PM, Martin Batholdy <
>> [email protected]> wrote:
>>
>>> I have tried to replicate the example on the help page;
>>>
>>>
>>> x <- data.frame(category = sample(3, 10, r=TRUE), rnorm(10, 5, 2))
>>> y <- data.frame(category = sample(3, 10, r=TRUE), rnorm(10, 8, 2))
>>>
>>> merge(x, y, by = "category")
>>>
>>>
>>>
>>> When I do that, I get a data.frame with 28 rows instead of 10.
>>>
>>> What am I doing wrong?
>>>
>>>
>>>
>>> Am 18.06.2009 um 02:42 schrieb David Winsemius:
>>>
>>>
>>> Red the help page for merge:
>>>>
>>>> ?merge
>>>>
>>>>
>>>> On Jun 17, 2009, at 8:33 PM, Martin Batholdy wrote:
>>>>
>>>> hi,
>>>>>
>>>>>
>>>>> I have two data.frames each with two columns;
>>>>>
>>>>>
>>>>> x1
>>>>>
>>>>> 1 4
>>>>> 1 3
>>>>> 1 6
>>>>> 2 9
>>>>> 2 2
>>>>> 2 5
>>>>> 3 6
>>>>> 3 7
>>>>> 3 4
>>>>>
>>>>>
>>>>> x2
>>>>>
>>>>> 1 -3
>>>>> 1 -7
>>>>> 2 -3
>>>>> 2 -2
>>>>> 2 -8
>>>>> 3 -1
>>>>> 3 -2
>>>>> 3 -1
>>>>>
>>>>> now I want to merge this data.frames to one data.frame.
>>>>>
>>>>> The problem is, that sometimes there is a different number of elements
>>>>> per category.
>>>>> (like above x1 has 3 values for the value 1 in the first row, but x2
>>>>> has only 2 values for the value 1 in the first row).
>>>>>
>>>>> Is there an easy way to merge this two data.frames by deleting the rows
>>>>> that only one data.frame "has".
>>>>> In the example, that resulting data.frame would be the data.frame x1
>>>>> and x2 except the row 3 of data.frame x1.
>>>>>
>>>>> thanks for any suggestions!
>>>>>
>>>>> ______________________________________________
>>>>> [email protected] 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.
>>>>>
>>>>
>>>> David Winsemius, MD
>>>> Heritage Laboratories
>>>> West Hartford, CT
>>>>
>>>>
>>> ______________________________________________
>>> [email protected] 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.
>>>
>>
>>
>>
>> --
>> Henrique Dallazuanna
>> Curitiba-Paraná-Brasil
>> 25° 25' 40" S 49° 16' 22" O
>>
>>
>>
>
>
> --
> Henrique Dallazuanna
> Curitiba-Paraná-Brasil
> 25° 25' 40" S 49° 16' 22" O
>
>
>
--
Henrique Dallazuanna
Curitiba-Paraná-Brasil
25° 25' 40" S 49° 16' 22" O
[[alternative HTML version deleted]]
______________________________________________
[email protected] 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.