使用差值的R:二元运算符的非数字参数错误

5anewei6  于 2023-01-03  发布在  其他
关注(0)|答案(3)|浏览(133)

我们使用以下命令解析包含一些数字的CSV文件:

tt <- read.table("test2.csv",sep=";",stringsAsFactors=FALSE)

打印tt[1,]可以产生一个很好的矢量,sd(tt[1,])是明智的。
但是当我们尝试

diff(tt[1,])

命令行返回错误:

Error in r[i1] - r[-length(r):-(length(r) - lag + 1L)] :
    non-numeric argument to binary operator error

为什么?有什么想法吗?

bwntbbo3

bwntbbo31#

我想在你的tt[1,]

class(tt[1,])
# [1] "data.frame"

所以如果你使用as.numeric,应该没问题。

diff(as.numeric(tt[1,]))

下面是一个我们可以检验的例子:

tt <- data.frame(x = 1, y = 2)
is.vector(tt[1,])
# [1] FALSE
class(tt[1,])
# [1] "data.frame"
diff(tt[1,])
# Error in r[i1] - r[-length(r):-(length(r) - lag + 1L)] : 
#   non-numeric argument to binary operator
as.numeric(tt[1,])
# [1] 1 2
diff(as.numeric(tt[1,]))
# [1] 1
gdx19jrr

gdx19jrr2#

这也适用于:

for (i1 in 1:length(dat.diff))
{
diffy <- diff(as.numeric(dat.diff[,i1]))
dat.diff[,i1] <- c(diffy, NA)
}
vhmi4jdf

vhmi4jdf3#

我不认为这个问题与类dataframe(df)有关。问题是你试图在一个可能是多列的df上运行diff()。根据文档,diff所需的参数是一个向量或矩阵。我建议尝试一下:

TS_tt <- ts(tt$col, start= (the date you would like to start the time series)

然后运行:

adjusted_tt <- diff(tt, difference= 1)

希望这个有用。

相关问题