警告数值表达式具有> 1个元素:仅使用第一个元素

时间:2018-03-13 06:25:09

标签: r datatable sum row multiple-columns

我有一个数据集如下:

Apr May Jun Jul Aug Sep Oct Nov b
1.0 9.0 4.0 5.3 6.4 3.4 2.5 4.3 2
5.0 6.0 9.0 2.3 5.8 2.3 6.5 5.2 3
8.0 4.0 6.0 0.7 5.2 1.2 2.2 6.1 4
2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 7
3.2 3.2 3.2 3.2 3.2 3.2 3.2 3.2 8
4.4 4.1 5.1 6.1 7.1 8.1 9.1 6.8 6
5.6 5.0 3.2 4.2 5.2 1.2 2.2 3.2 5
6.8 5.9 8.9 2.3 3.3 5.7 4.7 3.7 5
8.0 6.8 9.8 4.8 5.8 6.8 7.8 8.8 5
9.2 7.7 7.7 2.8 3.8 4.8 5.8 6.8 6

我想添加一列总和data$sum=rowSums(data[data$b:8])。但是获得一个警告`数字表达式有2124个元素:只有第一个使用。请让我知道一个更好的方法。

1 个答案:

答案 0 :(得分:0)

以下是基于您的评论的解决方案:

data$sum <- NA # important to create the column before the for loop
for (rowIdx in 1:nrow(data)) {
   startCol <- data[rowIdx, "b"]
   data[rowIdx, "sum"] <-  sum(data[rowIdx, startCol:8])
}

您需要使用for循环/ apply语句来实现此目的,因为您无法使用[子集运算符为每一行指定不同的起始列。

根据您的数据结构,使用[]而不使用逗号时可能会发生两件事:

  • 如果datamatrix,它会将整个矩阵视为单个向量,其中每列都是一个接一个地出现。例如,data[1:15]将返回&#34; Apr&#34;中的10个值。然后列&#34; May&#34;中的前5个值列。

  • 如果datadata.frame,它将使用索引查找列。这是data[1:5]data[,1:5]相同。这样做的原因是data.frame实际上是list(),其中每列都是list()的元素。