2016-06-14 3 views
3

J'utilise le package formattable pour générer une table mise en forme. J'ai trouvé une bonne ressource Formatting tables in R. Mais ici l'exemple de la mise en forme des flèches est basé uniquement sur la colonne spécifique. Ma condition est la suivante: Dites que j'ai des villes différentes, colonne A et B, où A a des facteurs avec deux niveaux 'Nombre d'arbres' et 'Pollution', tandis que B est le pourcentage de changement de ces YoY. Je veux donc formater la Colonne B avec une flèche verte positive s'il y a une augmentation pour les valeurs de la Colonne A étant 'Nombre d'arbres' (puisqu'elle est positive) et rouge s'il y a une diminution tandis que pour la pollution inverse.Formatable basé sur plusieurs colonnes

prenant donc l'exemple (crédit: Markus Gesmann) du lien lui-même, dire juste pour IBM, même si le changement est < 0, je veux montrer une flèche verte positif contre elle.

library(formattable) 
DF <- data.frame(Ticker=c("", "", "", "IBM", "AAPL", "MSFT"), 
      Name=c("Dow Jones", "S&P 500", "Technology", 
        "IBM", "Apple", "Microsoft"), 
      Value=accounting(c(15988.08, 1880.33, NA, 
           130.00, 97.05, 50.99)), 
      Change=percent(c(-0.0239, -0.0216, 0.021, 
           -0.0219, -0.0248, -0.0399))) 
DF 
## Ticker  Name  Value Change 
## 1   Dow Jones 15,988.08 -2.39% 
## 2   S&P 500 1,880.33 -2.16% 
## 3  Technology  NA 2.10% 
## 4 IBM  IBM 130.00 -2.19% 
## 5 AAPL  Apple  97.05 -2.48% 
## 6 MSFT Microsoft  50.99 -3.99% 
formattable(DF, list(
    Name=formatter(
    "span", 
    style = x ~ ifelse(x == "Technology", 
         style(font.weight = "bold"), NA)), 
    Value = color_tile("white", "orange"), 
    Change = formatter(
    "span", 
    style = x ~ style(color = ifelse(x < 0 , "red", "green")), 
    x ~ icontext(ifelse(x < 0, "arrow-down", "arrow-up"), x))) 
) 
+0

Certains exemples de données seraient utiles, et un exemple de code que vous avez essayé d'utiliser ces exemples de données mais qui ne fonctionne pas comme vous le souhaitez serait encore plus utile. – vielmetti

+0

Salut vielmetti, j'ai ajouté un exemple et le code, malheureusement, je ne sais pas quel est le code alternatif pour atteindre ce qui ne fonctionne pas, donc ne pas ajouter. Merci –

+0

Merci Anurag H - pouvez-vous ajuster votre code d'échantillon afin qu'il comprenne des données qui reflètent votre condition - par ex. de sorte qu'il a des arbres et de la pollution au lieu de l'information ticker boursier? – vielmetti

Répondre

9

Basé sur le doc à ?formatter:

formattable(DF, list(
    Name=formatter(
    "span", 
    style = x ~ ifelse(x == "Technology", 
         style(font.weight = "bold"), NA)), 
    Value = color_tile("white", "orange"), 
    Change = formatter(
    "span", 
    style = ~ style(color = ifelse(Change < 0 & Ticker != "IBM", "red", "green")), 
    ~ icontext(ifelse(Change < 0 & Name != "IBM", "arrow-down", "arrow-up"), Change))) 
) 

Apparemment, le style de formule x ~ vous empêche d'utiliser la seule la variable elle-même sur le côté droit. Vous devez passer à ~ puis écrire le nom de colonne explicitement sur le côté droit (au lieu de x).

+2

Pure élégance! Bien fait Frank –

+0

wow. Je vous remercie. – user2979010