首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:'x‘中的colSums必须是至少二维的数组

问R:'x‘中的colSums必须是至少二维的数组
EN

Stack Overflow用户
提问于 2017-09-19 22:27:01
回答 1查看 37.6K关注 0票数 2

总的来说,我是一个编程的初学者。我正在尝试从R中名为a的数据框中计算两个参数。对于行i和列j,我感兴趣的是:

B=(列j中所有值的总和)- ai,j

C=(行i中所有值的总和)- ai,j

对于i=1,j=2,我写道:

代码语言:javascript
复制
  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会给出一个错误:

代码语言:javascript
复制
Error in base::colSums(x, na.rm = na.rm, dims = dims, ...) : 
  'x' must be an array of at least two dimensions

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-19 22:43:49

该问题是由命令a[1:nrow(a),1]引起的。此命令选择数据帧a第一列的所有行,但以矢量形式返回结果(不是数据帧)。函数colSums不适用于一维对象(如向量)。

附注:您不需要使用1:nrow(a)来选择所有行。同样,在逗号前有一个空参数:a[ , 1]也更容易实现。

示例数据帧:

代码语言:javascript
复制
dat <- data.frame(a = 1:3, b = 4:6)
#   a b
# 1 1 4
# 2 2 5
# 3 3 6

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

代码语言:javascript
复制
dat[ , 1]
# [1] 1 2 3

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

代码语言:javascript
复制
dat[ , 1, drop = FALSE]
#   a
# 1 1
# 2 2
# 3 3

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

代码语言:javascript
复制
colSums(dat[ , 1, drop = FALSE])
# a 
# 6 
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46303057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档