【问题标题】:How to keep row names with running() function?如何使用 running() 函数保留行名?
【发布时间】:2023-03-22 17:34:01
【问题描述】:

我想知道在使用running() 函数时如何保留行名。

例如我在两个时间序列之间应用运行相关性,对我来说保留行名非常重要,因为这些是我的时间序列的年份。

这是一个例子:

library(gtools)

test <- matrix(rnorm(100, sd=4), nrow = 50, ncol=2, 
               dimnames= list(1966:2015, c("var1", "var2")))               

# View(running(test[,1], test[,2], fun=cor, width=5, by=5))
run.test <- running(test[,1], test[,2], fun=cor, width=5, by=5)

我明白了

    row.names   x
1   1:5 0.41739378
2   6:10    0.96117176
3   11:15   -0.54342033
4   16:20   0.09633428
5   21:25   -0.07296177
6   26:30   0.60366540
7   31:35   -0.34679270
8   36:40   -0.07828379
9   41:45   0.89614252
10  46:50   0.65230839

但我想保留矩阵的行名,以便在 row.names 中有类似的内容:

    row.names   x
1   1966:1970   0.41739378
2   1971:1975   0.96117176
3   1976:1980   -0.54342033
4   1981:1985   0.09633428
5   1986:1990   -0.07296177
6   1991:1995   0.60366540
7   1996:2000   -0.34679270
8   2001:2005   -0.07828379
9   2006:2010   0.89614252
10  2011:2015   0.65230839

我尝试过类似的方法,但不起作用

running(test[,1], test[,2], fun=cor, width=5, by=5, rownames=rownames(test)) 

某个方向?

【问题讨论】:

  • 您似乎正在为您正在使用 View 检查的对象获取数据框。我只看到一个向量。 (真正的男人不使用View();他们使用str()
  • 亲爱的@BondedDust 非常感谢您的友好回答。由于我仍然是初学者而不是像您这样的专家,也许我对 View() 函数的使用错误,但我仍然是一个真正的男人:) 包容性,如果我将 running() 函数应用于一个数据框,我不知道如何保留行名或标签。我只复制了 View() 生成的结果以更好地显示我的问题。

标签: r rowname


【解决方案1】:

我认为与其尝试保留名称,不如简单地更改它们,因为显然running 无论如何都会使用间隔作为向量名称。对于您的示例,您可以这样做:

library(gtools)
years <- 1966:2015 #Define the years interval
test <- matrix(rnorm(100, sd=4), nrow = 50, ncol=2, dimnames= list(years, c("var1", "var2")))
result <- running(test[,1], test[,2], fun=cor, width=5, by=5) #save the output
n <-length(years)
intervals <- paste0(years[seq(1, n, by=5)],":", years[seq(5, n, by=5)]) #create the intervals as strings
names(result) <- intervals #rename the output vector

【讨论】:

    【解决方案2】:

    这会从 run.test 中拆分名称(这是一个命名向量,而不是您显示的数据框对象)。然后我抓取名字的向量,强制转换为数字并从测试数据框中提取。然后对第二个名称执行相同操作并将结果粘贴在一起:

     rn <- strsplit(names(run.test) , ":")
    
     as.numeric(sapply(rn, "[", 1))
    # [1]  1  6 11 16 21 26 31 36 41 46
    
     names(run.test) <- paste(rownames(test)[as.numeric(sapply(rn, "[", 1))] ,
                              rownames(test)[as.numeric(sapply(rn, "[", 2))]  , sep=":")
     run.test
    #------------
     1966:1970  1971:1975  1976:1980  1981:1985  1986:1990  1991:1995  1996:2000  2001:2005  2006:2010  2011:2015 
     0.5016829 -0.5987129 -0.5026115  0.5441250 -0.4203586 -0.4452988 -0.1111146 -0.5197370 -0.2468734 -0.1138099 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-22
      • 2019-03-07
      • 1970-01-01
      相关资源
      最近更新 更多