RStudioを使用してcsvファイルをRにインポートしました。ここでは、ゲームごとのポイントをゲームごとの分数に対してプロットしようとしています。ただし、ゲームあたりの分数はmm:ssの形式であり、10進形式に変換する方法を見つけるのに苦労しています。
助けてください!
文字ベクトルから始めることを考えると、これは比較的簡単です。
_minPerGame <- c("4:30","2:20","34:10")
sapply(strsplit(minPerGame,":"),
function(x) {
x <- as.numeric(x)
x[1]+x[2]/60
}
)
_
与える
_[1] 4.500000 2.333333 34.166667
_
オプション_as.is=TRUE
_とともにread.csv()
を使用したことを確認してください。それ以外の場合は、as.character()
を使用して変換する必要があります。
あなたはそれを10進数化するために必要ですか?たとえば、Rの日時クラスの1つであるクラスPOSIXlt
のオブジェクトとしてデータを正しい形式で格納すると、Rは時刻の正しい処理を数値形式で処理します。これが私の言いたいことの例です:
まず、説明のためにダミーデータを作成します。
set.seed(1)
DF <- data.frame(Times = seq(as.POSIXlt("10:00", format = "%M:%S"),
length = 100, by = 10),
Points = cumsum(rpois(100, lambda = 1)))
head(DF)
ここに日付があるという事実を無視します。すべての観測値が同じ日付部分を持っているため、プロットを行うときに事実上無視されます。次に、Rの式インターフェイスを使用してこれをプロットします。
plot(Points ~ Times, data = DF, type = "o")
これを生成します:
最初のソリューションの調整:
minPerGame <- paste(sample(1:89,100000,T),sample(0:59,100000,T),sep=":")
f1 <- function(){
sapply(strsplit(minPerGame,":"),
function(x) {
x <- as.numeric(x)
x[1]+x[2]/60
}
)
}
#
f2<- function(){
w <- matrix(c(1,1/60),ncol=1)
as.vector(matrix(as.numeric(unlist(strsplit(minPerGame,":"))),ncol=2,byrow=TRUE)%*%w)
}
system.time(f1())
system.time(f2())
system.time(f1())ユーザーシステムの経過0.88 0.00 0.86
system.time(f2())ユーザーシステムの経過0.25 0.00 0.27