【问题标题】:Conditionally updating cells in a data.table有条件地更新 data.table 中的单元格
【发布时间】:2019-02-08 18:11:46
【问题描述】:

我有一个季度观察数据表,我想将其与医疗补助扩展相关联。为此,我希望我的 data.table (expanded_medicaid) 中有一个变量,如果状态扩展它,则为 1,否则为 0。我有另一个 data.table,其中包含扩展日期。

所以,例如,我的主要 data.table 是这样的:

state_name  qtr     ...data columns
Alabama     2008 Q1  
Alabama     2008 Q2
...
Alaska      2008 Q1
Alaska      2008 Q2
... etc

另一个数据表有扩展日期

state_name    qtr
Alaska        2015 Q1
Arizona       2014 Q1
Arkansas      2014 Q1
... etc

如果 qtr >= 第二个 data.table 中该州的 qtr,我是否可以创建一个列 expanded_medicaid 为 1? (这似乎是 sapply 的工作,但我从来没有正确理解 sapply 的工作原理。)

编辑:理想的结果是主表如下所示:

state_name   qtr      expanded_medicaid   ...data columns
...
Alaska       2013 Q3  0
Alaska       2013 Q4  0
Alaska       2014 Q1  0
Alaska       2014 Q2  0
Alaska       2014 Q3  0
Alaska       2014 Q4  0
Alaska       2015 Q1  1
Alaska       2015 Q2  1
...
Arizona      2013 Q3  0
Arizona      2013 Q4  0
Arizona      2014 Q1  1
Arizona      2014 Q2  1
Arizona      2014 Q3  1
Arizona      2014 Q4  1
Arizona      2015 Q1  1
Arizona      2015 Q2  1
...

【问题讨论】:

  • 请为这两个表提供一些示例数据。预期结果也将是有用的。注意使用dput - 你现在的格式不明确

标签: r data.table


【解决方案1】:

您可以将data.tablezooas.yearqtr() 函数结合起来比较季度

library(zoo)
library(data.table)

df1 <- data.table(state_name = c('Alabama', 'Arizona', 'Arkanas'),
                  qtr = c('2008 Q1', '2009 Q2', '2009 Q3'))

df2 <- data.table(state_name = c('Alabama', 'Arizona', 'Arkanas'),
                  qtr = c('2007 Q1', '2012 Q2', '2009 Q3'))

df1[, qtr := as.yearqtr(qtr, format = "%Y Q%q")]
df2[, qtr := as.yearqtr(qtr, format = "%Y Q%q")]

df1[df2, on = .(state_name), expanded_medicaid := as.integer(qtr >= i.qtr)]

#   state_name     qtr expanded_medicaid
#1:    Alabama 2008 Q1                 1
#2:    Arizona 2009 Q2                 0
#3:    Arkanas 2009 Q3                 1

【讨论】:

  • 完美。我不知道 data.table 可以做这样的连接!
猜你喜欢
  • 2015-09-14
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 2020-12-02
相关资源
最近更新 更多