我想知道在使用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))

一些方向?

最佳答案

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

 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

关于r - 如何使用running()函数保留行名?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29453006/

10-13 07:01