我是编码的初学者。我试图从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
我也读过其他帖子,但找不到答案。你有什么建议吗?
答案 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