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中提取元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章