0
votes

Comment faire fonctionner une boucle dans R avec deux conditions des vecteurs

J'ai la trame de données suivante (voir dput () ci-dessous): xxx

et deux vecteurs xxx

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. xxx

Tous les commentaires et conseils sont très appréciés. Merci d'avance! xxx


0 commentaires

3 Réponses :


1
votes

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


0 commentaires

0
votes

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 


0 commentaires

1
votes

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


2 commentaires

Merci beaucoup! Fonctionne parfaitement bien et beaucoup plus vite qu'une boucle.


Si vous avez une grande quantité de données, datable.table le gère plus efficacement. Dans ce cas, essayez @ la réponse de Wimpel