Modérateur : Groupe des modérateurs
Laurent Michelizza a écrit :Bonjour,
Je cherche a importer du data a partir de fichiers csv de cette forme:
Pour cela je me sert de:
symbolframe <- read.table(datafile, sep=",", header = TRUE)
Laurent Michelizza a écrit :Deuxieme probleme:
Je stocke les dates sous ce format: 05/01/2007 00:30:00, le probleme etant que a minuit, je n'ai que la date et pas l'heure dans mes fichiers. Et les fonctions de conversion ne reconnaissent pas l'heure dans ce cas (ou alors je m'y prend mal...). Serait il mieux dans mon cas de stocker la date separee de l'heure, de cette forme: Date,Time (05/01/2007,00:30:00,..)?
Code : Tout sélectionner
test <- read.csv("test.csv",sep=",",h=T,row.names=1)
test
DateTime Open High Low Close
05/01/2007 1.30935 1.30872 1.30895 1.30890 0
05/01/2007 00:30:00 1.30895 1.30765 1.30895 1.30785 0
05/01/2007 01:00:00 1.30925 1.30792 1.30800 1.30895 0
05/01/2007 01:30:00 1.30895 1.30835 1.30895 1.30855 0
test <- as.matrix(test)
# pour rajouter minuit
rownames(test) <- ifelse(nchar(rownames(test))<=10,paste(rownames(test),"00:00:00",sep=" "),rownames(test))
# ou encore
rownames(test)[nchar(rownames(test))<=10] <- paste(rownames(test)[nchar(rownames(test))<=10],"00:00:00")
Laurent Michelizza a écrit :Bonjour,
Encore nouveau sur R, je tatonne petit a petit pour comprendre son utilisation ainsi que le langage.
Je cherche a importer du data a partir de fichiers csv de cette forme:
DateTime, Open, High, Low, Close
05/01/2007,1.30935,1.30872,1.30895,1.3089,0
05/01/2007 00:30:00,1.30895,1.30765,1.30895,1.30785,0
05/01/2007 01:00:00,1.30925,1.30792,1.308,1.30895,0
05/01/2007 01:30:00,1.30895,1.30835,1.30895,1.30855,0
Pour cela je me sert de:
symbolframe <- read.table(datafile, sep=",", header = TRUE)
datamatrix <- as.matrix(symbolframe[2:6])
rownames(datamatrix) <- as.matrix(symbolframe[1])
La date servant de nom de ligne. Le reste sous la forme d'une matrice a 5 colonnes.
Premier probleme:
J'ai essaye d'utiliser la fonction scan puis importer sous forme de matrice, mais je dois mal m'y prendre car je me retrouve avec une matrice de listes correspondant aux colonnes du fichier (bref pas ideal...))...
row.names a vector of row names. This can be a vector giving the actual row names, or a single number giving the column of the table which contains the row names, or character string giving the name of the table column containing the row names.
Code : Tout sélectionner
> Data <- read.table("d:/analyses/travail/data/exemple.txt", sep=",", header = TRUE, row.names = 1)
> Data
Open High Low Close X
05/01/2007 1.30935 1.30872 1.30895 1.30890 0
05/01/2007 00:30:00 1.30895 1.30765 1.30895 1.30785 0
05/01/2007 01:00:00 1.30925 1.30792 1.30800 1.30895 0
05/01/2007 01:30:00 1.30895 1.30835 1.30895 1.30855 0
Deuxieme probleme:
Je stocke les dates sous ce format: 05/01/2007 00:30:00, le probleme etant que a minuit, je n'ai que la date et pas l'heure dans mes fichiers. Et les fonctions de conversion ne reconnaissent pas l'heure dans ce cas (ou alors je m'y prend mal...). Serait il mieux dans mon cas de stocker la date separee de l'heure, de cette forme: Date,Time (05/01/2007,00:30:00,..)?
Troisieme probleme:
Est ce que je devrais utiliser des tseries ou irts dans ce cas ou cela ne vous semble pas necessaire?
Merci d'avance pour vos reponses,
Laurent
Code : Tout sélectionner
> Data <- read.table("d:/analyses/travail/data/exemple.txt", sep=",", header = TRUE)
> Data
DateTime Open High Low Close X
1 05/01/2007 00:00:00 1.30935 1.30872 1.30895 1.30890 0
2 05/01/2007 00:30:00 1.30895 1.30765 1.30895 1.30785 0
3 05/01/2007 01:00:00 1.30925 1.30792 1.30800 1.30895 0
4 05/01/2007 01:30:00 1.30895 1.30835 1.30895 1.30855 0
> tmp <- strptime(as.character(Data[, 1]), format = "%m/%d/%Y %H:%M:%S")
> myDate <- as.POSIXct(tmp)
> myDate
[1] "2007-05-01 00:00:00 Paris, Madrid (heure d'été)" "2007-05-01 00:30:00 Paris, Madrid (heure d'été)" "2007-05-01 01:00:00 Paris, Madrid (heure d'été)"
[4] "2007-05-01 01:30:00 Paris, Madrid (heure d'été)"
> diff(myDate)
Time differences of 30, 30, 30 mins
> myData <- Data[ , -1]
> var(myData)
Open High Low Close X
Open 4.250000e-08 5.066667e-08 -3.958333e-08 8.375000e-08 0
High 5.066667e-08 2.224667e-07 7.600000e-08 1.523333e-07 0
Low -3.958333e-08 7.600000e-08 2.256250e-07 -1.227083e-07 0
Close 8.375000e-08 1.523333e-07 -1.227083e-07 2.572917e-07 0
X 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0
Renaud Lancelot a écrit :pour avoir la date en nom de ligne. Mais c'est bizarre, comme idée !
Ca évite d'avoir une matrice avec des types inhomogènes.
Et une matrice homogène :
1/ ça calcule plus vite,
2/ on évite les annoyances coté conversion explicites et/ou implicites
Si c'est pour faire de l'inhomogène, autant bosser avec data.frame
(et là, on est encore plus sûr de ramer !)
E.V. Dennst a écrit :Renaud Lancelot a écrit :pour avoir la date en nom de ligne. Mais c'est bizarre, comme idée !
Ca évite d'avoir une matrice avec des types inhomogènes.
Et une matrice homogène :
1/ ça calcule plus vite,
2/ on évite les annoyances coté conversion explicites et/ou implicites
Si c'est pour faire de l'inhomogène, autant bosser avec data.frame
(et là, on est encore plus sûr de ramer !)
Oui mais j'imagine que certaine calculs sont faits sur les dates ou qu'elles servent d'axe des x dans un graphe ==> il est nécessaire qu'elles soient sous une forme exploitable ce qui n'est sûrement pas le cas en tant que nom de ligne.
Renaud
Laurent Michelizza a écrit :La date n'est pas si importante que ca a vrai dire... Je m'en sers tres peu, j'ai choisi ce format car je pense que les matrices ont une utilisation plus flexible que les dataframes etsont plus rapides.
Laurent Michelizza a écrit :Je peux toujours acceder aux dates via rownames si j'en ai besoin. Peut etre cela est lent aussi?
Renaud Lancelot a écrit :Oui mais j'imagine que certaine calculs sont faits sur les dates ou qu'elles servent d'axe des x dans un graphe ==> il est nécessaire qu'elles soient sous une forme exploitable ce qui n'est sûrement pas le cas en tant que nom de ligne.
Renaud
For a data frame, value for rownames should be a character vector of non-duplicated and non-missing names (this is enforced), and for colnames a character vector of (preferably) unique syntactically-valid names. In both cases, value will be coerced by as.character.
Code : Tout sélectionner
test <- as.matrix(scan(file="test.txt",what=double(0), sep="\t",skip=1),ncol=...,nrow=...,byrow=TRUE)
Retourner vers « Questions en cours »
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité