R:'中的colSums;x';必须是至少二维的数组
一般来说,我是一名编码初学者。我试图从R中名为R:'中的colSums;x';必须是至少二维的数组,r,matrix,dataframe,sum,R,Matrix,Dataframe,Sum,一般来说,我是一名编码初学者。我试图从R中名为a的数据框中计算两个参数。对于第I行和第j列,我感兴趣的是找到: B=(第j列中所有值的总和)-a[i,j] C=(第i行中所有值的总和)-a[i,j] 对于i=1,j=2,我在写: A = a[1,2] B = (colSums(a[1:nrow(a),1],na.rm = FALSE, dims = 1) - A) C = (rowSums(a[1,1:ncol(a)],na.rm = FALSE, dims = 1) - A) C
a
的数据框中计算两个参数。对于第I行和第j列,我感兴趣的是找到:
B=(第j列中所有值的总和)-a[i,j]
C=(第i行中所有值的总和)-a[i,j]
对于i=1,j=2,我在写:
A = a[1,2]
B = (colSums(a[1:nrow(a),1],na.rm = FALSE, dims = 1) - A)
C = (rowSums(a[1,1:ncol(a)],na.rm = FALSE, dims = 1) - A)
C似乎给出了正确的答案。但是,B给出了一个错误:
Error in base::colSums(x, na.rm = na.rm, dims = dims, ...) :
'x' must be an array of at least two dimensions
我也读过其他文章,但找不到我的答案。您有什么建议吗?问题是由于命令
a[1:nrow(a),1]
造成的。此命令选择数据帧a
第一列的所有行,但将结果作为向量(而不是数据帧)返回。函数colSums
不适用于一维对象(如向量)
作为旁注:您不需要1:nrow(a)
来选择所有行。如果逗号前面有一个空参数:a[,1]
,则更容易实现这一点
示例数据帧:
dat <- data.frame(a = 1:3, b = 4:6)
# a b
# 1 1 4
# 2 2 5
# 3 3 6
如果指定drop=FALSE
,则返回一列数据帧
dat[ , 1, drop = FALSE]
# a
# 1 1
# 2 2
# 3 3
此一栏数据框是二维对象,因此可与colSums
一起使用
colSums(dat[ , 1, drop = FALSE])
# a
# 6
我认为问题是因为您只有一列,
colSums()
应用于具有多列的矩阵。在这种情况下,您需要使用a[1:nrow(a),1]
,这与a[,1]
相同,因为您选择的是所有行。
colSums(dat[ , 1, drop = FALSE])
# a
# 6