【问题标题】:Warning numerical expression has >1 elements: only the first used警告数值表达式有 >1 个元素:仅第一个使用
【发布时间】:2018-08-21 07:40:25
【问题描述】:

我有一个数据集如下:

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 个元素:只使用第一个。请告诉我更好的方法。

【问题讨论】:

  • 你能告诉我们你期望的输出吗?
  • data$sum <- sum(data$b[1:8])
  • 您确定使用 colSum 吗?那应该创建一行。如果您想总结每一行,请使用data$sum=rowSums(data)data$b:8 没有意义
  • 对于每一行,sum 的元素会有所不同,例如对于第一行,总和将从 2:8 到 3:8,依此类推,具体取决于 b 列中的数字。这就是我使用 data$b:8 的原因。
  • @AlbertRajan 请在您的问题中添加其他信息(而不是在评论中),即编辑您的问题: stackoverflow.com/posts/49249572/edit

标签: r datatable sum row multiple-columns


【解决方案1】:

这是基于您的 cmets 的解决方案:

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 循环/应用语句来实现此目的,因为您无法使用 [ 子集运算符为每一行指定不同的起始列。

根据您的数据结构,当您使用不带逗号的 [] 时可能会发生两种情况:

  • 如果datamatrix,它将把整个矩阵视为一个向量,其中每一列一个接一个地出现。例如,data[1:15] 将返回“Apr”列中的 10 个值,然后返回“May”列中的前 5 个值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 2021-08-17
    • 2018-02-07
    • 2016-01-08
    • 2021-11-29
    • 2014-06-04
    相关资源
    最近更新 更多