R:“ x”中的colSums必须是至少二维的数组

Dia*_*a01 1 r sum matrix dataframe

我是一般的编码初学者。我正在尝试从aR中命名的数据帧计算两个参数。对于第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)
Run Code Online (Sandbox Code Playgroud)

C似乎给出了正确的答案。但是,B给出了一个错误:

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

我也阅读了其他主题,但找不到答案。你有什么建议吗?

Sve*_*ein 6

问题是由于命令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
Run Code Online (Sandbox Code Playgroud)

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

dat[ , 1]
# [1] 1 2 3
Run Code Online (Sandbox Code Playgroud)

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

dat[ , 1, drop = FALSE]
#   a
# 1 1
# 2 2
# 3 3
Run Code Online (Sandbox Code Playgroud)

此一列数据帧是二维对象,因此可以与一起使用colSums

colSums(dat[ , 1, drop = FALSE])
# a 
# 6 
Run Code Online (Sandbox Code Playgroud)