我在StackOverflow上是新来的。我想对一个数据框应用3函数,以创建一个新的数据框。
emiscore$rank19<-rank(-emiscore$"2019")
emi_P_19<-filter(emiscore,rank19<31)
emi_P_19<-emi_P_19[order(emi_P_19$Name),]
emi_P_19的前10行显示如下:
structure(list(Name = c("LA Z BOY", "1 800 FLOWERS.COM 'A'",
"AGEAS (EX FORTIS)", "AGFA GEVAERT", "AIR FRANCE KLM", "ANHEUSER BUSCH INBEV"
), DATATYPE = c("TRESGENERS", "TRESGENERS", "TRESGENERS", "TRESGENERS",
"TRESGENERS", "TRESGENERS"), `2019` = c(0, 0, NA, NA, NA, NA),
`2018` = c(8.33, 0, 22.15, 64.46, 97.92, 58.47), `2017` = c(0,
0, 0, 63.11, 97.83, 49.14), `2016` = c(0, 0, 0, 58.65, 95.83,
61.46), `2015` = c(NA, NA, 0, 64.89, 93.27, 67.71), `2014` = c(NA,
NA, 0, 60.26, 94.57, 59.78), `2013` = c(NA, NA, 0, 64.63,
96.74, 77.17), `2012` = c(NA, NA, 0, 67.86, 98.96, 75), `2011` = c(NA,
NA, 0, 67.07, 96.81, 70.93), `2010` = c(NA, NA, 17.05, 71.25,
98.98, 88.46), `2009` = c(NA, NA, 11.59, 68.92, 88.16, 92.65
), `2008` = c(NA, NA, 18.85, 71.21, 92.42, 77.59), `2007` = c(NA,
NA, 50.93, 79.69, 80.36, 78), delisted = c("NO", "NO", "NO",
"NO", "NO", "NO"), rank20 = c(535, 535, 646, 647, 648, 649
), rank19 = c(535, 535, 646, 647, 648, 649)), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))
因此,本质上,我想对排名前30名的公司进行排名,并按字母顺序对它们进行排序,以创建一个新的数据框,其中包含从2007年到2019年每年的公司名称(名称为“ Name”的列)。最终目标是获取每年的列表,该列表按字母顺序显示如上排名和筛选的公司名称。
正如@Parfait提到的,如果将数据保留为长格式,则进行数据操作变得非常容易,您可以执行以下操作:
library(dplyr)
result <- emiscore %>%
tidyr::pivot_longer(cols = `2019`:`2007`, names_to = 'year') %>%
group_by(year) %>%
top_n(30, value)
这将选择每年的前30个值。