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
Vous devez vous connecter pour publier un commentaire.
Supposons que votre dataframe est nommé df, essayez ceci:
df$Ranking <- ave(as.character(df$Category), df$Category, FUN = seq_along)
devrait également fonctionner.Bon point, c'est vrai.
Salut Sophia / Ananda Maho, Pouvez-vous s'il vous plaît regarder à l'exigence supplémentaire ajouté dans la Question ?
Désolé, je ne comprends pas votre question après l'ajout de ces nouvelles exigences.
OriginalL'auteur Sophia