R中的colSums:' x'必须是至少包含两个维度的数组

时间:2017-09-19 14:27:01

标签: 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似乎给出了正确的答案。但是,B给出错误:

Error in base::colSums(x, na.rm = na.rm, dims = dims, ...) : 
  'x' must be an array of at least two dimensions

我也读过其他帖子,但找不到答案。你有什么建议吗?

1 个答案:

答案 0 :(得分:5)

问题是由命令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

如果选择一列,结果将自动转换为矢量。

dat[ , 1]
# [1] 1 2 3

如果指定drop = FALSE,则返回一列数据框。

dat[ , 1, drop = FALSE]
#   a
# 1 1
# 2 2
# 3 3

此单列数据框是一个二维对象,因此可以与colSums一起使用。

colSums(dat[ , 1, drop = FALSE])
# a 
# 6