[R] handling the output of strsplit
Denis Chabot
chabotd at globetrotter.net
Sat Jun 21 01:29:12 CEST 2008
Most helpful Gabor,
Many thanks,
Denis
Le 08-06-20 à 18:58, Gabor Grothendieck a écrit :
> We construct a times object by replacing the letter h with
> a : and then pasting a :00 on the end. Then replace any occurrence
> of :: with :00: . Its now in the format that times recognizes so we
> can
> just convert that to times and apply hours() and minutes() to get
> the components:
>
>> library(chron)
>> h2 <- times(sub("::", ":00:", paste(sub("h", ":", h), "00", sep =
>> ":")))
>> hours(h2)
> [1] 3 6 9 11 14 15 23
>> minutes(h2)
> [1] 30 30 40 25 0 55 0\
>
> Another possibility is to use gsubfn in package gsubfn. It matches
> the
> string such that it captures the hour and minutes in the two
> backreferences
> and then pastes them together with a :00 at the end. It then
> replaces
> :: with :00: and converts that to times. hours() and minutes()
> could be used,
> as before, to get the components.
>
>> library(gsubfn)
>> times(gsubfn("([^h]+)h(.*)", ~ sub("::", ":00:", paste(..., "00",
>> sep = ":")), h, backref = -2))
> [1] 03:30:00 06:30:00 09:40:00 11:25:00 14:00:00 15:55:00 23:00:00
>
> Here is another approach using strapply in the gsubfn package. We
> use the
> same pattern but this time convert each component to numeric:
>
>> times(strapply(h, "([^h]+)h(.*)", ~ as.numeric(x) / 24 +
>> sum(as.numeric(y), na.rm = TRUE)/(24*60), backref = -2, simplify =
>> c))
> [1] 03:30:00 06:30:00 09:40:00 11:25:00 14:00:00 15:55:00 23:00:00
>
>
>
> On Fri, Jun 20, 2008 at 6:14 PM, Denis Chabot <chabotd at globetrotter.net
> > wrote:
>> Hi,
>>
>> Simple question, but I did not figure out how to find the answer on
>> my own
>> (wrong choice of keywords on my part).
>>
>> I have a character variable for time of day that has entries
>> looking like
>> "6h30", "7h40", "12h25", "23h", etc. For the sake of this message,
>> say
>>
>> h = c("3h30", "6h30", "9h40", "11h25", "14h00",
>> "15h55", "23h")
>>
>> I could not figure out how to use chron to import this into times,
>> so I
>> tried to extract the hours and minutes on my own.
>>
>> I used strsplit and got a list:
>>
>> h2 = strsplit(h, "h")
>>> h2
>> [[1]]
>> [1] "3" "30"
>>
>> [[2]]
>> [1] "6" "30"
>>
>> [[3]]
>> [1] "9" "40"
>>
>> [[4]]
>> [1] "11" "25"
>>
>> [[5]]
>> [1] "14" "00"
>>
>> [[6]]
>> [1] "15" "55"
>>
>> [[7]]
>> [1] "23"
>>
>> It is where I am stuck. I would have like to extract a vector of
>> "hours"
>> from this list, and a vector of "minutes", to reconstruct a time of
>> day.
>>
>> But the only command I know, unlist, makes a long vector of h, min,
>> h, min,
>> h, min.
>>
>> For this in particular, but lists in general, how can one extract
>> the first
>> item of each element in the list, then the second item of each
>> element,
>> etc.?
>>
>> Thanks in advance,
>>
>> Denis
>>
>> ______________________________________________
>> 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