【问题标题】:Reading column number instead of value in that column [duplicate]读取列号而不是该列中的值[重复]
【发布时间】:2018-09-07 00:45:22
【问题描述】:

今天我遇到了一些奇怪的问题。我有一个 25 列的数据框(假设该列称为比特币)。我有一个循环,在该循环内我想从其他列中读取值:

for(i in 1:5)
{
  a <- a + (Bitcoin[1,5] - Bitcoin[1, 5 + i])
}

假设 i=4。我应该得到 Bitcoin[1,9] 的值,即 11400,但我总是得到这一列的数字 -> 9。当我写两个公式时:

Bitcoin[1,9]
Bitcoin[1,5+i]

值不同,第一个是 11400,第二个是 9。为什么会这样?

【问题讨论】:

  • class(Bitcoin) 是 data.table 正确的 ;-)
  • 是的,没错。
  • 好的,我已经把它改成了data.frame,现在它是正确的。但是为什么会这样呢?
  • 使用:Bitcoin[1, 5 + i,with=FALSE]
  • data.table 将尝试像函数一样应用5+i,而不是将其用作列的位置。如果您使用 data.table,这是一个有用的链接:cran.r-project.org/web/packages/data.table/vignettes/… 对于这个特定的问题检查部分 (g)。

标签: r dataframe data.table


【解决方案1】:

来自?data.table

. with=FALSE is often useful in data.table to select columns dynamically. Note that x[, cols, with=FALSE] is equivalent to x[, .SD, .SDcols=cols]

示例:

aaa <- mtcars
setDT(aaa)
i=6
#eval step by step and see the outcome:
aaa[1,3+i]
aaa[1,3+i,with=FALSE]
aaa[, .SD, .SDcols=3+i]
aaa[1,9]

【讨论】:

    猜你喜欢
    • 2020-07-15
    • 2019-05-27
    • 2014-05-06
    • 2017-03-15
    • 2020-04-08
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多