2017-03-02 1 views
1

J'essaye de comparer deux dataframes de timeseries avec différentes dimensions.Comparer les données de différentes dimensions

Market_Cap

Date   Stock_A  Stock_B  Stock_C 
01.01.1990 1    3   7 
01.02.1990 2    4   8 
01.03.1990 3    5   1 
01.04.1990 4    6   2 

Market_Cap_quantiles

Date   Bottom_quantile  
01.01.1990 1.4      
01.02.1990 2.4      
01.03.1990 1.4      
01.04.1990 2.4      

Y at-il une solution élégante qui vérifie chaque rangée de Market_Cap si les stocks belonges dans le Market_Cap_quantile, et si remplacent pas la valeur de NA. Alors que je me retrouve avec quelque chose comme ceci:

Bottom_Stocks

Date   Stock_A  Stock_B  Stock_C 
01.01.1990 1    NA   NA 
01.02.1990 2    NA   NA 
01.03.1990 NA   NA   1 
01.04.1990 NA   NA   2 

Je serais très reconnaissant de votre aide!

+0

[Fusionner] (http://stackoverflow.com/questions/1299871) sur Date, puis de mettre à jour les colonnes. – zx8754

Répondre

0

Nous pouvons faire

df1[-1][df1[-1] > df2[,2]] <- NA 
df1 
#  Date Stock_A Stock_B Stock_C 
#1 01.01.1990  1  NA  NA 
#2 01.02.1990  2  NA  NA 
#3 01.03.1990  NA  NA  1 
#4 01.04.1990  NA  NA  2 
+2

Cela fonctionne si les lignes de la colonne Date sur les deux images correspondent à ligne par ligne. Je pense qu'ils veulent '<' au lieu de '! ='. – zx8754

+0

Hey mec merci beaucoup pour votre aide! J'ai une question est-il en quelque sorte possible d'insérer le NA i row plus tard? Je reçois la valeur d'erreur est la longueur incorrecte. –

+0

@LucaLiebi Votre commentaire n'est pas clair pour moi – akrun

0

Un chèque ifelse et% en% devrait être en mesure de faire le travail.

> a <- c(1:5) 
> b <- c(11:15) 
> c <- c(13:17) 
> df <- data.frame(a, b) 
> df2 <- data.frame(a, c) 

> df 
    a b 
1 1 11 
2 2 12 
3 3 13 
4 4 14 
5 5 15 

> df2 
    a c 
1 1 13 
2 2 14 
3 3 15 
4 4 16 
5 5 17 

> df[,3] <- ifelse(df[,2] %in% df2[,2], df[,2], NA) 

> df 
    a b V3 
1 1 11 NA 
2 2 12 NA 
3 3 13 13 
4 4 14 14 
5 5 15 15