我使用csv文件读取数据
d<-read.csv("myfile.csv",header=TRUE)
Run Code Online (Sandbox Code Playgroud)
数据被正确读取并具有10列带有标题的双数据.
我想创建一个矩阵(我的话 - 不确定我在R中真正想要的)日志差异.
logs<-log(d)
Run Code Online (Sandbox Code Playgroud)
这很好,但是
diffs<-diff(logs)
Run Code Online (Sandbox Code Playgroud)
给出了这个错误:
- (长度(r) - 滞后+ 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
Run Code Online (Sandbox Code Playgroud)
这里的关键(和你的问题)是,虽然diff(令我惊讶的是)在矩阵上自动按列工作,但它不适用于数据帧,这是你得到的,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))
Run Code Online (Sandbox Code Playgroud)
我最初的答案是你应该使用
apply(logs,2,diff)
Run Code Online (Sandbox Code Playgroud)
明确地使用diff每一列.但是,来自?diff:
x:包含要区分的值的数字向量或矩阵....如果'x'是矩阵,则分别对每列执行差异运算.
diff(c(as.matrix(logs)))如果您想将整个事物视为单个连续(列有序)向量,您也可以这样做.