【问题标题】:R Extracting elements from data.table in for loop [duplicate]R在for循环中从data.table中提取元素[重复]
【发布时间】:2022-01-11 16:26:41
【问题描述】:

我有两个 data.tables。一个 data.table (dt1) 包含个人来自(国家)和个人出生时间(日期)的信息。另一个 data.table (dt2) 包含每个国家和每年的索引。

dt1 <- data.table(country=c("Argentina", "Brazil", "United States"), 
                  date = c("2012-25-12", "2015-21-05", "2017-01-06"))

dt2 <- data.table(country=c("Argentina", "Brazil", "United States"), 
                  "2012" = c(0.25, 0.85, 0.11),
                  "2013" = c(0.43, 0.23, 0.95),
                  "2014" = c(0.35, 0.45, 0.66),
                  "2015" = c(0.45, 0.63, 0.45),
                  "2016" = c(0.78, 0.54, 0.22),
                  "2017" = c(0.22, 0.22, 0.32))

我想将一个 data.table (dt2) 的信息添加到另一个 data.table (dt1) 中,具体取决于年份和国家/地区。

我尝试了一个 for 循环

years <- as.character(2012:2017)
for(i in 1:length(years)){
  for(j in countries)
  {dt1[country==j & date <=as.Date(paste0(years[i], "-12-31")), index:=dt2[country==(j), (1+i)]]
    
  }
}

我希望 dt1 看起来像这样:

         country       date index
1:     Argentina 2012-12-25     0.25
2:        Brazil 2015-05-21     0.63
3: United States 2017-01-06     0.32

相反,dt1 看起来像这样:

         country       date index
1:     Argentina 2012-12-25     7
2:        Brazil 2015-05-21     7
3: United States 2017-01-06     7

即索引等于最后的1+i,即循环的第6次迭代

我需要更改什么,以便 index 实际上是 dt2 中满足国家和年份条件的元素?

感谢任何帮助和反馈,如果这个问题缺乏清晰度或可重复性。 谢谢

【问题讨论】:

    标签: r loops data.table


    【解决方案1】:

    尝试合并():

    merge(x = dt1, y = dt2, by="country")
    

    【讨论】:

      【解决方案2】:
      merge(
        dt1[, year := substr(date, 1, 4)],
        melt(dt2, id = "country", variable.name = "year", value.name = "index")
      )
      
      #          country year       date index
      # 1:     Argentina 2012 2012-25-12  0.25
      # 2:        Brazil 2015 2015-21-05  0.63
      # 3: United States 2017 2017-01-06  0.32
      

      【讨论】:

      • 谢谢!我只是没有考虑合并作为一种选择。非常有帮助,梅林。
      猜你喜欢
      • 2021-12-05
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      • 2015-06-09
      相关资源
      最近更新 更多