R:'中的colSums;x';必须是至少二维的数组

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

一般来说,我是一名编码初学者。我试图从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似乎给出了正确的答案。但是,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