Comment ajouter une nouvelle colonne et des valeurs agrégées dans R

je suis complètement nouveau à gnuplot et je suis seulement essayer ceci parce que j'ai besoin de l'apprendre. J'ai une valeur dans trois colonnes où la première représente le nom du fichier (date et heure, intervalle d'une heure) et les deux autres colonnes représentent deux entités différentes Prop1 et Prop2.

Datetime             Prop1        Prop2

20110101_0000.txt     2            5
20110101_0100.txt     2            5
20110101_0200.txt     2            5
...
20110101_2300.txt     2            5
20110201_0000.txt     2            5
20110101_0100.txt     2            5
...
20110201_2300.txt     2            5
...

j'ai besoin d'agréger les données à l'heure de la journée (**_0100) qui est le dernier de quatre chiffres. Donc, je veux créer une autre colonne appelée heure qui m'a dit l'heure de la journée. Il signifie 0000 = 0h, 0100 = 1h, ...... 2200 = 22h etc.

je veux alors obtenir la somme de Prop1 et Prop2 pour chaque heure, donc à la fin obtenir quelque chose comme.

Hour  Prop1   Prop2
0h     120     104
1h     230     160
...
10h    90      110
...
23h    100    200 

et le obtenir un tracé en ligne de Prop1 et Prop2.

1
demandé sur sfactor 2011-02-17 13:05:39

1 réponses

une solution générale avec gsub:

Data$Hour <- gsub(".+_(\d+).txt","\1",Data$Datetime)

EDIT:

Vous pouvez utiliser Data$Hour <- substr(Data$Hour,1,2) , pour obtenir l'heure. Comme dit dans les commentaires, si vous avez toujours exactement la même structure Datetime, vous pouvez utiliser substr() immédiatement:

Data$Hour <- substr(Data$Datetime,10,11)

, Alors vous pouvez utiliser aggregate , tapply , by , ... que ce soit pour faire ce que vous voulez. Pour additionner Prop1 et Prop2, vous pouvez utiliser agrégat, par exemple:

aggregate(Data[2:3],list(Data$Hour),sum)

avec l'ensemble de données:

zz<-textConnection("Datetime             Prop1        Prop2
20110101_0000.txt     2            5
20110101_0100.txt     2            5
20110101_0200.txt     2            5
20110101_2300.txt     2            5
20110201_0000.txt     2            5
20110201_0100.txt     2            5
20110201_0200.txt     2            5
20110201_2300.txt     2            5")
Data <- read.table(zz,header=T,as.is=T)
5
répondu Joris Meys 2011-02-17 13:20:20