如何使用 运行() 函数保留行名?
How to keep row names with running() function?
我想知道如何在使用 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))
有什么方向吗?
我认为与其尝试保留名称,不如简单地更改它们,因为显然 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
这会将名称从 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
我想知道如何在使用 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))
有什么方向吗?
我认为与其尝试保留名称,不如简单地更改它们,因为显然 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
这会将名称从 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