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)
我也阅读了其他主题,但找不到答案。你有什么建议吗?
问题是由于命令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)