R在for循环中从data.table中提取元素[重复]

Posted

技术标签:

【中文标题】R在for循环中从data.table中提取元素[重复]【英文标题】:R Extracting elements from data.table in for loop [duplicate] 【发布时间】: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 中满足国家和年份条件的元素?

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

【问题讨论】:

【参考方案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

【讨论】:

谢谢!我只是没有考虑合并作为一种选择。非常有帮助,梅林。

以上是关于R在for循环中从data.table中提取元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C++ - 在 FOR 循环中从向量获取大小

使用 data.table 加速 j 中的顺序任务的 for 循环

使用 R (data.table) 提取重叠和非重叠时间段

如何在R中使用for循环提取多个子字符串

如何在 for 循环中提取 JSON 文件的元素

通过 data.table (R) 循环 grepl()