var doublePattern = @"(?<integer>[0-9]+)(?:\,|\.)(?<fraction>[0-9]+)";
var sourceDoubleString = "03444,44426";
var match = Regex.Match(sourceDoubleString, doublePattern);
var doubleResult = match.Success ? double.Parse(match.Groups["integer"].Value) + (match.Groups["fraction"].Value == null ? 0 : double.Parse(match.Groups["fraction"].Value) / Math.Pow(10, match.Groups["fraction"].Value.Length)): 0;
Console.WriteLine("Double of string '{0}' is {1}", sourceDoubleString, doubleResult);
Я бы сделал это следующим образом:
library(lubridate)
#get df1...
#convert hr to something more useable with...
df1$hr <- hour(hm(df1$hr))
ggplot(df1, aes(x = hr, y = Val, color = Date)) + geom_line()
или, если вы специально хотите "%H:%M"
или похож на ваш х Формат времени метки оси:
ggplot(df1, aes(x = hr, y = Val, color = Date)) + geom_line() + scale_x_continuous(breaks = seq(0, 23, 1), labels = paste(seq(0, 23, 1), "00", sep = ":"))
Объяснение : мне никогда не было легко работать со временем и датами , так что если вы можете немного упростить задачу, сделайте это.
В вашем случае вас интересует только час дня, поэтому минуты излишни. Чтобы извлечь только час из вашего времени как символьный тип данных, есть несколько способов, но используя lubridate, вы можете использовать hm(df1$hr)
, который преобразует «10:00» в "10H 0M 0S"
, который является типом данных периода, от которого вы просто хотите час, который вы можете сделать с hour()
, который даст вам 10 в качестве числового типа данных.
Так как один строчный hour(hm(df1$hr))
преобразует «10:00» в 10, то ggplot может просто отобразить «Val» против «hr» как числовые типы данных вместо временных или символьных типов данных, которые я считаю более легкое задание.