【问题标题】:Extracting data in a list within a list in R (subsetting list within a list)在R中的列表中提取列表中的数据(列表中的子集列表)
【发布时间】:2021-03-02 22:11:23
【问题描述】:

我有一个 3 个列表,每个列表中都有另一个包含两个时间序列的列表。下面的代码将解释我的情况:

set.seed(12)
dummy.df <- as.data.frame(matrix(round(rnorm(1200),digits=2),nrow=100,ncol=12))
rownames(dummy.df) <- seq(from=1901, to=2000)
colnames(dummy.df) <- c("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec")
dummy.df.ts <- ts(as.vector(as.matrix(dummy.df)), start=c(1901,1), end=c(2000,12), frequency=12)
dummy.df.ts

我将创建 6 个虚拟列表直到 dummy.df.5 并创建虚拟嵌套列表,如下所示:

lit1 <- list(dummy.df.ts,dummy.df1.ts)
lit2 <- list(dummy.df2.ts,dummy.df3.ts)
lit3 <- list(dummy.df4.ts,dummy.df5.ts)
finaldata <- list(lit1,lit2,lit3)

每个时间序列如下所示:

然后我将应用此代码来获得每 3 个列表中的最小值和最大值:

sapply(finaldata, function(x)range(x))


要得到这个结果:


我如何能够提取从函数范围获得的每个后续最小值和最大值的年份和月份?我想知道如何提取/子集以下嵌套的时间序列字符串。

【问题讨论】:

  • 你试过sapply(finaldata, function(x) sapply(x, range))

标签: r


【解决方案1】:

转换为xts 对象,然后索引或行名将是年和月

library(xts)
do.call(rbind, lapply(finaldata, function(x) do.call(rbind,
     lapply(x, function(y)  {xt1 <- as.xts(y)
       subset(xt1, xt1 %in% range(xt1))}))))

rapply

do.call(rbind, do.call(c, rapply(finaldata, function(x) {
   xt1 <- as.xts(x)
   subset(xt1, xt1 %in% range(xt1))}, how = 'list')))

或者另一种选择是获取对应的time,用as.yearmonzoo转换为年份mon

library(zoo)
unlist(lapply(finaldata, function(x) 
  lapply(x, function(y) as.character(as.yearmon(time(y))[y %in% range(y)]))))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    相关资源
    最近更新 更多