J'ai la trame de données suivante (voir et deux vecteurs p> J'aimerais calculer la moyenne volumesek pour chaque stock de chaque jour et enregistrer les résultats dans une matrice. Je suis tout à fait nouveau pour que mon premier devinait devait utiliser une boucle. Cependant, cela n'a pas travaillé pour moi jusqu'à présent. C'était mon approche, mais je suis un peu perdue et cela pourrait ne pas être la bonne approche du tout. P> Tous les commentaires et conseils sont très appréciés. Merci d'avance! P> dput () code> ci-dessous):
3 Réponses :
APPROCHE DE DONNÉES. DATABLES, CASTED au format large
library(data.table) dcast( setDT(df)[ Company %in% Comp & Date %in% Day, ][, list( mean = mean(VolumeSEK)), by = .(Company, Date)], Company ~ Date ) # Company 11.09.2018 12.09.2018 13.09.2018 14.09.2018 17.09.2018 # 1: Alfa Laval 22245.50 30550.00 NA NA NA # 2: Investor 31687.49 119911.60 NA 89315.02 NA # 3: Kinnevik 76522.20 9017.90 29150.00 11943.30 65490.40 # 4: SEB 48347.85 52926.21 1253.98 NA 35450.97 # 5: Skanska NA 60478.40 NA NA 11523.06 # 6: Swedbank 49560.15 NA 161560.30 149519.25 8512.00
Voici une solution avec le package code> Tidyverse Code>. Notez qu'aucune boucle n'est nécessaire ici:
library(tidyverse) df %>% as_tibble %>% group_by(Date, Company) %>% summarise(x = mean(VolumeSEK)) %>% ungroup() %>% spread(Company, x) # A tibble: 5 x 7 Date `Alfa Laval` Investor Kinnevik SEB Skanska Swedbank <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> 1 11.09.2018 22246. 31687. 76522. 48348. NA 49560. 2 12.09.2018 30550 119912. 9017.9 52926. 60478. NA 3 13.09.2018 NA NA 29150 1254.0 NA 161560. 4 14.09.2018 NA 89315. 11943. NA NA 149519. 5 17.09.2018 NA NA 65490. 35451. 11523. 8512
Utilisation de BASIC R:
library(reshape2) dcast(df2, Company ~ Date, value.var = "VolumeSEK") Company 11.09.2018 12.09.2018 13.09.2018 14.09.2018 17.09.2018 1 Alfa Laval 22245.50 30550.00 NA NA NA 2 Investor 31687.49 119911.60 NA 89315.02 NA 3 Kinnevik 76522.20 9017.90 29150.00 11943.30 65490.40 4 SEB 48347.85 52926.21 1253.98 NA 35450.97 5 Skanska NA 60478.40 NA NA 11523.06 6 Swedbank 49560.15 NA 161560.30 149519.25 8512.00
Merci beaucoup! Fonctionne parfaitement bien et beaucoup plus vite qu'une boucle.
Si vous avez une grande quantité de données, datable.table code> le gère plus efficacement. Dans ce cas, essayez @ la réponse de Wimpel