我有一张表,该表可以按年给出一个国家的gpi得分。
我拥有的最终数据帧中的现有数据:
gpi_year gpi_rank gpi_country gpi_score
2018 1 Iceland 1.096
2018 2 New Zealand 1.192
2018 3 Austria 1.274
.
.
.
2018 161 South Sudan 3.508
2018 162 Afghanistan 3.585
2018 163 Syria 3.6
但是,我需要为每一行添加一个日期范围。
示例: 我将检查该行是否具有 2018 ,如果是,那么我将从 2018年1月1日至2018年12月31日的每个日期重复该国家/地区的记录(因为是2018年)。即一个国家的365个日期。
类似地,如果该行包含任何国家/地区的 2017 数据,则我需要从 2017年1月1日至31-12-日之间的每个日期重复该国家/地区的记录2017 ,即一个国家/地区有365个日期。
示例:需要类似的输出:
gpi_year gpi_rank gpi_country gpi_score date
2018 1 Iceland 1.096 01-01-2018
2018 1 Iceland 1.096 02-01-2018
2018 1 Iceland 1.096 03-01-2018
.
.
.
.
2018 1 Iceland 1.096 29-12-2018
2018 1 Iceland 1.096 30-12-2018
2018 1 Iceland 1.096 31-12-2018
2018 2 New Zealand 1.096 01-01-2018
2018 2 New Zealand 1.096 02-01-2018
2018 2 New Zealand 1.096 03-01-2018
.
.
.
.
2018 2 New Zealand 1.096 29-12-2018
2018 2 New Zealand 1.096 30-12-2018
2018 2 New Zealand 1.096 31-12-2018
注意::我的数据有 163 个国家/地区。每个国家/地区的得分分别为 2017 和 2018 。 因此,我需要为每个国家/地区分配日期,范围为2017年1月1日至2017年1月31日以及2018年1月1日至2018年1月31日。
答案 0 :(得分:1)
将data.table
与人工数据框一起使用:
library(data.table)
df <- data.frame("gpi_year" = 2018, "gpi_rank" = 1, "gpi_country" = "Iceland",
"gpi_score" = 1.096)
df <- setDT(df)[, .(gpi_rank = gpi_rank, gpi_country = gpi_country, gpi_score = gpi_score,
date = seq(as.Date(paste0(gpi_year, "-01-01")),
as.Date(paste0(gpi_year, "-12-31")), by = "day"),
gpi_year = gpi_year), by = 1:nrow(df)][, nrow := NULL]
输出:
gpi_rank gpi_country gpi_score date gpi_year
1: 1 Iceland 1.096 2018-01-01 2018
2: 1 Iceland 1.096 2018-01-02 2018
3: 1 Iceland 1.096 2018-01-03 2018
4: 1 Iceland 1.096 2018-01-04 2018
5: 1 Iceland 1.096 2018-01-05 2018
---
361: 1 Iceland 1.096 2018-12-27 2018
362: 1 Iceland 1.096 2018-12-28 2018
363: 1 Iceland 1.096 2018-12-29 2018
364: 1 Iceland 1.096 2018-12-30 2018
365: 1 Iceland 1.096 2018-12-31 2018