总的来说,我是一个编程的初学者。我正在尝试从R中名为a的数据框中计算两个参数。对于行i和列j,我感兴趣的是:
B=(列j中所有值的总和)- ai,j
C=(行i中所有值的总和)- ai,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我也读过其他帖子,但找不到我的答案。你有什么意见建议?
发布于 2017-09-19 22:43:49
该问题是由命令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 https://stackoverflow.com/questions/46303057
复制相似问题