我有一个数据表,看起来像这样:
# 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
Run Code Online (Sandbox Code Playgroud)
我想计算标准分数value,然后删除value变量。为此,我使用了链接:在第一组方括号中计算标准分数(ss),然后在第二组方括号中选择列year,ss然后删除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
Run Code Online (Sandbox Code Playgroud)
由reprex软件包(v0.3.0)创建于2019-08-07
这是我想要的结果。
我的问题:在这种情况下,我是否必须使用链条?是否有一种方法可以更新(即,计算ss)并选择一组中想要的列[]?
显然,您正在寻找简单的方法dt[, .(year, ss = scale(value))]。您可以通过选择列表中的列来对data.table进行子集化,并且在该列表中还可以创建新的向量。
| 归档时间: |
|
| 查看次数: |
43 次 |
| 最近记录: |