Classement dataframe colonnes dans la R

J'ai la trame de données, ci-dessous sont des exemples de données.

Company     Category    Margin
SBI             BK      34.5
PNB             BK      39.5
UCO BANK        BK      39.9
BANK            BK      41.3
INDIAN BANK     BK      42.3
DENA BANK       BK      44.5
VIJAYA BANK     BK      44.5
UNION BANK      BK      47.6
CENTRAL BANK    BK      49.8
INFOSYS         IT      5.6
HCL TECH        IT      5.9
TCS             IT      6.9
CMC             IT      12.6
TECHMAHINDRA    IT      12.6
COGNIZANT       IT      15.8
IGATE           IT      22.4
WIPRO           IT      22.9
HEXAWARE        IT      34.8
MAHINDRA SATYAM IT      34.8
DR. REDDYS      PH      14.5
SUN PHARMA      PH      19.2
CIPLA           PH      23.9
LUPIN           PH      23.9
DIVIS LABS      PH      29

Un regard attentif sur la trame de données indique qu'il est triée en fonction de la CATÉGORIE, de la MARGE et puis la COMPAGNIE des colonnes.

Maintenant, mon exigence est d'ajouter une nouvelle colonne intitulée Classement et de donner un classement à partir de 1 pour chaque jeu de la CATÉGORIE. Le Classement de la numérotation doit commencer à partir de 1 chaque fois qu'une nouvelle CATÉGORIE apparaît sur la liste

Exemple De Sortie:

Company     Category    Margin     Ranking
SBI             BK      34.5       1
PNB             BK      39.5       2
UCO BANK        BK      39.9       3 
BANK            BK      41.3       4
INDIAN BANK     BK      42.3       5
DENA BANK       BK      44.5       6
VIJAYA BANK     BK      44.5       7
UNION BANK      BK      47.6       8
CENTRAL BANK    BK      49.8       9
INFOSYS         IT      5.6        1
HCL TECH        IT      5.9        2
TCS             IT      6.9        3
CMC             IT      12.6       4
TECHMAHINDRA    IT      12.6       5
COGNIZANT       IT      15.8       6
IGATE           IT      22.4       7
WIPRO           IT      22.9       8
HEXAWARE        IT      34.8       9
MAHINDRA SATYAM IT      34.8       10
DR. REDDYS      PH      14.5       1
SUN PHARMA      PH      19.2       2
CIPLA           PH      23.9       3
LUPIN           PH      23.9       4
DIVIS LABS      PH      29         5

Autre Exigence

Assumer jeu de données d'Entrée qui est complètement en zigzag. Puis

unique(df$Category)   # gives 5 different category
[1] "BK" "IT" "PH" "MT" "EG"

Après le formatage, le même que celui des retours

unique(df$Category)   # gives only 3 categories. rest of 2 categories were deleted.
[1] "BK" "IT" "PH"

Remarque: Dans le processus de formatage du jeu de données d'entrée afin de le préparer gratuit de valeurs manquantes, quelques catégories ont été achevés supprimé.

Remarque: Retourné dataframe doit avoir les noms de ligne comme des catégories

Après le Classement de la trame de données, je voudrais écrire une fonction, où je passerai le Classement en tant que paramètre à la fonction.
La fonction doit retourner un bloc de données de l'Entreprise dans chaque CATÉGORIE, avec rang spécifique. Dans le cas où, dans n'importe quelle CATÉGORIE, si il n'y a pas de SOCIÉTÉ avec un tel RANG spécifique puis NA sera retourné.

head(companyRanks(3), 4) returns
    COMPANY     CATEGORY
BK  UCO BANK        BK      
IT  TCS             IT      
PH  CIPLA           PH      
MT  <NA>            MT
EG  <NA>            EG

head(companyRanks(10), 4)  # returns:
            COMPANY     CATEGORY
BK             <NA>           BK  # Since there is no company with rank 10 under category BK, NA returned
IT  MAHINDRA SATYAM           IT      
PH             <NA>           PH      
MT             <NA>           MT
EG             <NA>           EG

Est-il une fonction permettant d'obtenir ce type d'exigence facilement?

OriginalL'auteur Kumar | 2013-10-16