[R] how to merge within range?

René Mayer mayer at psychologie.tu-dresden.de
Sat May 14 20:06:16 CEST 2011


thanks David and Ian,
let me make a better example as the first one was flawed

df.1=data.frame(round((1:10)*100+rnorm(10)), value=NA)
names(df.1) = c("time", "value")
df.1
    time value
1   101    NA
2   199    NA
3   301    NA
4   401    NA
5   501    NA
6   601    NA
7   700    NA
8   800    NA
9   900    NA
10 1000    NA

# from and to define ranges within time,
# note that from and to may not match the numbers given in time
df.2=data.frame(from=c(99,500,799),to=c(303,702,950), value=c(1,3,5))
df.2
   from  to value
1   99 303     1
2  500 702     3
3  799 950     5

what I want is:
    time value
1   101    1
2   199    1
3   301    1
4   401    NA
5   501    3
6   601    3
7   700    3
8   800    5
9   900    5
10 1000    NA

@David I don't know what you mean by 2 merges,
René





Zitat von "David Winsemius" <dwinsemius at comcast.net>:

>
> On May 14, 2011, at 9:16 AM, Ian Gow wrote:
>
>> If I assume that the third column in data.frame.2 is named "val" then in
>> SQL terms it _seems_ you want
>>
>> SELECT a.time, b.val FROM data.frame.1 AS a LEFT JOIN data.frame.2 AS b ON
>> a.time BETWEEN b.start AND b.end;
>>
>> Not sure how to do that elegantly using R subsetting/merge,
>
> Huh? It's just two merge()'s (... once you fix the error in the example.)
>
> -- 
> David
>
>> but you might
>> try a package that allows you to use SQL, such as sqldf.
>>
>>
>> On 5/14/11 8:03 AM, "David Winsemius" <dwinsemius at comcast.net> wrote:
>>
>>>
>>> On May 14, 2011, at 8:12 AM, René Mayer wrote:
>>>
>>>> Hello,
>>>> how can one merge
>>>
>>> And what happened when you typed:
>>>
>>> ?merge
>>>
>>>> two data frames when in the second data frame one column defines the
>>>> start values
>>>> and another defines the end value of the to be merged range.
>>>> data.frame.1
>>>> time ...
>>>> 13
>>>> 24
>>>> 35
>>>> 46
>>>> 55
>>>> ...
>>>> data.frame.2
>>>> start end
>>>> 24 37 ?h? ?
>>>> ...
>>>>
>>>> should result in this
>>>> 13 NA
>>>> 24 ?h?
>>>> 35 ?h?
>>>> 46 NA
>>>> 55
>>>> ?
>>>
>>> And _why_ would that be?
>>>
>>>
>>>> thanks,
>>>> René
>>>>
>>>> ______________________________________________
>>>> 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.
>>>
>>> David Winsemius, MD
>>> West Hartford, CT
>>>
>>> ______________________________________________
>>> 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.
>>
>>
>
> David Winsemius, MD
> West Hartford, CT
>
>



More information about the R-help mailing list