【问题标题】:Subsetting with loops循环子集
【发布时间】:2018-07-28 01:13:36
【问题描述】:

我是 R 新手,正在尝试找出一种方法来对我的数据集进行子集化,而无需为每个子集编写一行代码。我的数据集有多年,我试图每年都进行子集化。 “年份”列有 5 个不同的年份 2017、2016、2015、2014、2013。我目前做的是这个(数据集是我的原始数据):

Year17 <- dataset[dataset$Year=="2017",]
Year16 <- dataset[dataset$Year=="2016",]
Year15 <- dataset[dataset$Year=="2015",]
Year14 <- dataset[dataset$Year=="2014",]
Year13 <- dataset[dataset$Year=="2013",]

我认为有一些方法可以循环通过,但我无法弄清楚如何。

然后我也在寻找一种方法来提取四分位数、众数、中位数和标准差。我目前这样做:

Year17Finance <- quantile(Year17$Financials, probs= c(0.10, 0.25, 0.50, 0.75, 0.90), na.rm = T)
Year17Sales <- quantile(Year17$Sales, probs= c(0.10, 0.25, 0.50, 0.75, 0.90), na.rm = T)
mean(Year17$Financials, na.rm = T)
median(Year17$Financials,na.rm = T)
sd(Year17$Financials, na.rm = T)

我的最终目标是能够上传数据文件并通过代码运行它,然后输出给定变量的四分位数、均值、中位数和标准差。

任何指导将不胜感激。谢谢

【问题讨论】:

  • 您可以使用lapply 创建一个data.frames 列表,而不是在globalenv 中有这么多对象。类似lapply(as.character(2013:2017), function(y) dataset[dataset$Year == y, ])
  • 看拆分功能。这将拆分您的数据框并将结果放入列表中以供进一步分析。

标签: r


【解决方案1】:

我假设您正在创建每个子集数据框,以便您可以计算每年的汇总统计数据?对于这种类型的问题,我喜欢 data.table 包,它使您能够跨组列拆分计算:

library(data.table)
dataset <- as.data.table(dataset)

financial_summary_stats <- dataset[, list(
    q10 = quantile(Financials, 0.10, na.rm=TRUE),
    q25 = quantile(Financials, 0.25, na.rm=TRUE),
    q50 = quantile(Financials, 0.50, na.rm=TRUE),
    mean = mean(Financials, na.rm=TRUE),
    q75 = quantile(Financials, 0.75, na.rm=TRUE),
    q90 = quantile(Financials, 0.90, na.rm=TRUE)
  ), by = Year]

【讨论】:

  • 感谢您的帮助!我最终使用了 dplyr: dataset %>% group_by(Year) %>% summarise(mean(Financials, na.rm = T), median(Financials, na.rm = T), sd(Financials, na.rm = T ),分位数(财务,0.10,na.rm = T),分位数(财务,0.25,na.rm = T),分位数(财务,0.50,na.rm = T),分位数(财务,0.75,na.rm = T),分位数(财务,0.90,na.rm = T))
猜你喜欢
  • 2014-03-28
  • 2020-02-24
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
  • 2016-07-17
相关资源
最近更新 更多