【问题标题】:How to apply 3 function to create a new dataframe如何应用 3 个函数来创建一个新的数据框
【发布时间】:2020-05-26 00:21:15
【问题描述】:

我是 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 年每年的公司名称(名为“名称”的列)。 最终目标是获得按字母顺序显示上述排名和过滤的公司名称的每年列表。

【问题讨论】:

  • 数据分析的最佳实践是让您的数据保持较长(或tidy),而不是尽可能宽。你真的应该有一个 year 列来保存 2007-2019 的值。
  • 请使用dput添加数据,而不是图像。请阅读有关how to ask a good question 的信息以及如何提供reproducible example

标签: r data-analysis data-manipulation finance


【解决方案1】:

正如@Parfait 所说,如果您以长格式保存数据,那么进行数据操作会变得非常容易,您可以这样做:

library(dplyr)

result <- emiscore %>%
            tidyr::pivot_longer(cols = `2019`:`2007`, names_to = 'year') %>%
            group_by(year) %>%
            top_n(30, value)

这会选择每年的前 30 个值。

【讨论】:

  • 嗨 Ronak 和堆栈溢出社区。你能帮我找到复制这段代码的方法吗?
  • @DavidAskovich 如果你想要固定的行数,你可以arrange 数据和sliceemiscore %&gt;% tidyr::pivot_longer(cols = `2019`:`2007`, names_to = 'year') %&gt;% arrange(year, value) %&gt;% group_by(year) %&gt;% slice(1:30)
猜你喜欢
  • 1970-01-01
  • 2017-06-17
  • 2023-03-23
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
相关资源
最近更新 更多