您好我试图从B
矩阵中的列A
中减去列dat
以创建C
列(A
- {{ 1}}):
我的意见:
B
我的预期输出:
A B
1 2
2 2
3 2
4 2
我尝试过:A B C
1 2 -1
2 2 0
3 2 1
4 2 2
,但收到了dat$C <- (dat$A - dat$B)
错误
干杯。
答案 0 :(得分:15)
正如@Bryan Hanson在上述评论中所说,您的语法和数据组织更多地与数据框相关。我会将您的数据视为数据框,只需使用您之前提供的语法:
> data <- data.frame(A = c(1,2,3,4), B = c(2,2,2,2))
> data$C <- (data$A - data$B)
> data
A B C
1 1 2 -1
2 2 2 0
3 3 2 1
4 4 2 2
答案 1 :(得分:3)
是的,如果你真的是指一个矩阵,你可以看到这个例子
> x <- matrix(data=1:3,nrow=4,ncol=3)
> x
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 2 3 1
[3,] 3 1 2
[4,] 1 2 3
> x[,3] = x[,1]-x[,2]
> x
[,1] [,2] [,3]
[1,] 1 2 -1
[2,] 2 3 -1
[3,] 3 1 2
[4,] 1 2 -1
>
答案 2 :(得分:0)
但是,这里绝对应该指出,R中的矩阵运算不遵守通常的线性代数闭包。
> x[,3]-x[,1]
[1] 2 -1 -1 2
> is.matrix(x[,3]-x[,1])
[1] FALSE
此外,还可以直接预期一个列向量,该列向量可以通过应用矩阵转置TWICE(本身是怪异的)获得,而第一个向量将输出转换为矩阵。
> t(t(x[,3]-x[,1]))
[,1]
[1,] 2
[2,] -1
[3,] -1
[4,] 2
或者可以使用drop = FALSE选项:
>x[,3,drop=FALSE] - x[,1,drop=FALSE]
[,1]
[1,] 2
[2,] -1
[3,] -1
[4,] 2
虽然3D数组中2D切片的行为很好。