【问题标题】:Fix subscript out of bounds error when adding column to df将列添加到 df 时修复下标越界错误
【发布时间】:2021-02-03 08:48:19
【问题描述】:

我有一个包含 20 列数字数据的 df。我正在尝试添加一个带有“总”行数的附加列,但是我得到一个下标越界错误。这是我正在使用的代码:

df[,"Total"]<-rowSums(df)

这是错误:

Error in `[<-`(`*tmp*`, , "Total", value = c(Acidovorax = 13, Acinetobacter = 48143,  : 
  subscript out of bounds

【问题讨论】:

  • 似乎df 是一个矩阵,而不是data.frame。如果这是故意的,请使用df &lt;- cbind(df, Total = rowSums(df))。如果你不这么认为,那么这段代码不应该那样失败。请edit您的问题并提供dput(head(df))的输出。谢谢!
  • 是的,解决了它。用 as.data.frame() 修复

标签: r subscript


【解决方案1】:

data.frames 不应该发生这种情况,但matrix 会发生这种情况。

mt_mtx <- as.matrix(mtcars)

mtcars[,"Total"] <- rowSums(mtcars)
head(mtcars)
#                    mpg cyl disp  hp drat    wt  qsec vs am gear carb   Total
# Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4 328.980
# Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4 329.795
# Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1 259.580
# Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1 426.135
# Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2 590.310
# Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1 385.540

mt_mtx[,"Total"] <- rowSums(mt_mtx)
# Error in `[<-`(`*tmp*`, , "Total", value = c(`Mazda RX4` = 328.98, `Mazda RX4 Wag` = 329.795,  : 
#   subscript out of bounds

快速补救方法是将您的df 转换回data.frame。如果您没有预料到这一点,认为您的df 已经是一个框架,那么我建议您返回代码,找出意外将其强制转换为矩阵的原因。

【讨论】:

  • 我知道是这样,但我还是不明白为什么会这样。您可以很好地替换列mt_mtx[, "carb"] &lt;- 1,但不能创建它们。无论如何......足够的假设。
  • 这对我来说也是一个令人头疼的时刻。这是R。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 2015-04-03
  • 2015-02-11
相关资源
最近更新 更多