0

我使用从 csv 文件中读取数据

d<-read.csv("myfile.csv",header=TRUE)

数据被正确读取,并且有 10 列带标题的双数据。

我想创建一个日志差异的矩阵(我的话 - 不确定我在 R 中实际想要什么)。

logs<-log(d)

这工作正常,但是

diffs<-diff(logs)

给出这个错误:

-(length(r) - lag + 1L) <<< 我不知道这意味着什么......

编辑 1 我的数据(抱歉必须在这里输入 - 看不到附加文件的明显方式)

A,B,C
1.1,2.1,3.1
1.2,2.2,3.2
1.3,2.3,3.3
1.4,2.4,3.4
1.5,2.5,3.5
1.6,2.6,3.6
4

1 回答 1

5

这里的关键(和您的问题)是,虽然diff(令我惊讶的是)在矩阵上自动按列工作,但它不适用于data frames,这是您从中得到的,read.csv并且与矩阵略有不同。

d <- read.csv(textConnection("
A,B,C
1.1,2.1,3.1
1.2,2.2,3.2
1.3,2.3,3.3
1.4,2.4,3.4
1.5,2.5,3.5
1.6,2.6,3.6"))
(logs <- log(d))
diff(logs)
Error in r[i1] - r[-length(r):-(length(r) - lag + 1L)] : 
  non-numeric argument to binary operator

diff(as.matrix(logs))

我最初的回答是你应该使用

apply(logs,2,diff)

diff在每一列上显式使用。但是,从?diff

x:包含要区分的值的数字向量或矩阵。...如果“x”是一个矩阵,那么差分运算将分别在每一列上执行。

diff(c(as.matrix(logs)))如果您想将整个事物视为单个连续(按列排序)向量,您也可以这样做。

于 2012-12-05T15:17:39.857 回答