【问题标题】:Calling a double condition on data in R?在 R 中调用数据的双重条件?
【发布时间】:2015-06-06 16:35:34
【问题描述】:

我正在尝试为 1927 年至 2013 年的公司创建每月回报数据的第 20 和第 80 百分位数的两个向量。我遇到的问题是,在我的嵌套四循环中,我不知道如何引用这两个月和年份(即 1945 年 4 月所有公司的回报)。现在代码如下所示:

qunatile<-function(r){
  vec20<-c(rep(0,1038))
  vec80<-c(rep(0,1038))
  for(i in 1927:2013){
    for(j in 1:12){
      vec20[j+12(i-1927)]<-quantile(r$(i, j),20)
      vec80[j+12(i-1927)]<-quantile(r$(i, j),80)
    }
  }
  data1decilest<-rbind(ps1NYSE,vec20,vec80)
}

但我知道 r$(i, j) 表示法不正确。我想知道是否有人知道如何使用明显不正确的代码来做我正在尝试的事情(即参考给定年份中给定月份的所有回报。

谢谢!

【问题讨论】:

    标签: r for-loop vector reference subset


    【解决方案1】:

    消除嵌套循环的一个选项是在您的数据框中创建一个包含月/年组合的列(例如“Jan1955”、“Apr1999”等),然后在该变量上拆分您的数据框,并应用分位数职能。很难说这是否解决了您的问题,因为没有可重复的示例。我在这里假设您的数据称为df,并包含一个date 和一个value 列。

    library(lubridate)
    library(plyr)
    df$newtime <- paste0(month(df$date, label = T, abbr = T), year(df$date))
    q20 <- function(df){ quantile(df$value, 20) }
    q80 <- function(df){ quantile(df$value, 80) }
    vec20 <- ddply(df, .(newtime), FUN=q20)
    vec80 <- ddply(df, .(newtime), FUN=q80
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      相关资源
      最近更新 更多