我有数据框,下面是来自它的样本数据。
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
仔细查看数据框会告诉它在CATEGORY,MARGIN和COMPANY列上排序。
现在,我的要求是添加一个名为Ranking的新列,并为每组CATEGORY提供从1开始的排名。每当列表中出现新的CATEGORY时,排名编号应从1开始
示例输出:
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
进一步要求
假设完全锯齿形的输入数据集。然后
unique(df$Category) # gives 5 different category
[1] "BK" "IT" "PH" "MT" "EG"
格式化后,同一个返回
unique(df$Category) # gives only 3 categories. rest of 2 categories were deleted.
[1] "BK" "IT" "PH"
注意:在格式化输入数据集以使其免于缺失值的过程中,已完成删除了几个类别。
注意:返回的数据框应将行名称作为类别
在对数据框进行排名后,我想编写一个函数,其中我将排名作为参数传递给函数。 该函数应返回每个CATEGORY中具有该特定排名的公司的数据框。如果在任何CATEGORY中,如果没有具有此类特定排名的公司,则将返回NA。
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
是否有任何功能可以轻松获得此类要求?
答案 0 :(得分:10)
假设您的数据框名为df,请尝试以下操作:
df$Ranking <- ave( df$Margin, df$Category, FUN=rank )