【问题标题】:Update and select simultaneously in data.table在 data.table 中同时更新和选择
【发布时间】:2019-08-07 12:43:10
【问题描述】:

我有一个看起来像这样的

# Load library
library(data.table)

# Set RNG seed
set.seed(-1)

# Create data table
dt <- data.table(year = 2000:2019,
                 value = runif(20))

# Peek
dt
#>     year      value
#>  1: 2000 0.48666718
#>  2: 2001 0.19136526
#>  3: 2002 0.99327188
#>  4: 2003 0.14670268
#>  5: 2004 0.24158948
#>  6: 2005 0.53710122
#>  7: 2006 0.35821235
#>  8: 2007 0.87191898
#>  9: 2008 0.39259106
#> 10: 2009 0.21656725
#> 11: 2010 0.79346199
#> 12: 2011 0.26007283
#> 13: 2012 0.26831560
#> 14: 2013 0.53564863
#> 15: 2014 0.29142160
#> 16: 2015 0.94810504
#> 17: 2016 0.06352872
#> 18: 2017 0.09133961
#> 19: 2018 0.31097680
#> 20: 2019 0.76861987

我想计算value 的标准分数,然后删除value 变量。为此,我使用链接:在我的第一组方括号中我计算我的标准分数 (ss),然后在我的第二组方括号中我选择列 yearss 从而删除 value .

# Calculate standard score and drop 'value' column
dt[, ss := as.vector(scale(value))][, .(year, ss)]
#>     year         ss
#>  1: 2000  0.1656755
#>  2: 2001 -0.8473906
#>  3: 2002  1.9036392
#>  4: 2003 -1.0006105
#>  5: 2004 -0.6750908
#>  6: 2005  0.3386950
#>  7: 2006 -0.2750031
#>  8: 2007  1.4873246
#>  9: 2008 -0.1570631
#> 10: 2009 -0.7609324
#> 11: 2010  1.2181692
#> 12: 2011 -0.6116816
#> 13: 2012 -0.5834039
#> 14: 2013  0.3337118
#> 15: 2014 -0.5041362
#> 16: 2015  1.7486893
#> 17: 2016 -1.2859481
#> 18: 2017 -1.1905397
#> 19: 2018 -0.4370499
#> 20: 2019  1.1329455

reprex package (v0.3.0) 于 2019-08-07 创建

这是我想要的结果。

我的问题:我在这种情况下使用链还是有办法更新(即计算ss和 在一组 [] 中选择我想要的列?

【问题讨论】:

  • 不确定是否可以在没有链接的情况下完成,但我这样做的方式是定义要删除的列而不是保留的列,即dt[, ss := as.vector(scale(value))][, value := NULL]
  • dt[, .(year, ss = scale(value))]?
  • 太棒了@Roland——你能把它添加为答案,这样我就可以结束这个问题了吗?

标签: data.table r data.table


【解决方案1】:

显然您正在寻找简单的dt[, .(year, ss = scale(value))]。您可以通过选择列表中的列来对 data.table 进行子集化,并且您还可以在该列表中创建新向量。

【讨论】:

  • 这真的很有用。我误以为= 仅在汇总时使用(例如dt[, .(mean = mean(value))]),而:= 在添加新列时使用。
  • := is 在添加新列时使用。此解决方案创建一个新的 data.table(但 AFAIK 不应该深复制列)。
猜你喜欢
  • 2012-05-29
  • 1970-01-01
  • 2018-09-19
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多