构建数据框/数据的有效方法 Table
Efficient Way to Build Data Frame / Data Table
我有一个 data.frame 用于设置模拟参数。
states_grid <- expand.grid(years = c(1:47), start_pct = c(0:99), sim_num = c(1:50))
上面的代码创建了我想要模拟的所有状态。我的问题变成了创建一个 data.frame 来保存输出。我想做的是创建一个更大的数据框,我们在其中添加一个 ob_num 变量。 ob_num 变量将 运行 从 1 到第 1 列中指示的年数。
例如:
years start_pct sim_num ob_num
1: 2 99 1 1
2: 2 99 1 2
3: 3 99 1 1
4: 3 99 1 2
5: 3 99 1 3
6: 4 99 1 1
7: 4 99 1 2
8: 4 99 1 3
9: 4 99 1 4
但是我想不出创建此数据框的有效方法。
想法?
编辑:我尝试了以下建议,但似乎没有成功。
下面的代码 return 是一个具有相同大小 (235,000) 行的 data.table。
states_grid <- expand.grid(years = c(1:(year_max - year_min + 1)),
start_pct = c(0:99),
sim_num = c(1:50))
states_grid <- data.table(states_grid)
setDT(states_grid)[, ob_num := 1:.N, by = years][]
我也试过:
states_grid <- setDT(states_grid)[, ob_num := 1:.N, by = years][]
两种方法return 235K 行。
CJ(years = c(1:47), start_pct = c(0:99), sim_num = c(1:50))[,
.(ob_num = seq_len(years)), by = .(years, start_pct, sim_num)]
# years start_pct sim_num ob_num
# 1: 1 0 1 1
# 2: 1 0 2 1
# 3: 1 0 3 1
# 4: 1 0 4 1
# 5: 1 0 5 1
# ---
#5639996: 47 99 50 43
#5639997: 47 99 50 44
#5639998: 47 99 50 45
#5639999: 47 99 50 46
#5640000: 47 99 50 47
我有一个 data.frame 用于设置模拟参数。
states_grid <- expand.grid(years = c(1:47), start_pct = c(0:99), sim_num = c(1:50))
上面的代码创建了我想要模拟的所有状态。我的问题变成了创建一个 data.frame 来保存输出。我想做的是创建一个更大的数据框,我们在其中添加一个 ob_num 变量。 ob_num 变量将 运行 从 1 到第 1 列中指示的年数。
例如:
years start_pct sim_num ob_num
1: 2 99 1 1
2: 2 99 1 2
3: 3 99 1 1
4: 3 99 1 2
5: 3 99 1 3
6: 4 99 1 1
7: 4 99 1 2
8: 4 99 1 3
9: 4 99 1 4
但是我想不出创建此数据框的有效方法。
想法?
编辑:我尝试了以下建议,但似乎没有成功。
下面的代码 return 是一个具有相同大小 (235,000) 行的 data.table。
states_grid <- expand.grid(years = c(1:(year_max - year_min + 1)),
start_pct = c(0:99),
sim_num = c(1:50))
states_grid <- data.table(states_grid)
setDT(states_grid)[, ob_num := 1:.N, by = years][]
我也试过:
states_grid <- setDT(states_grid)[, ob_num := 1:.N, by = years][]
两种方法return 235K 行。
CJ(years = c(1:47), start_pct = c(0:99), sim_num = c(1:50))[,
.(ob_num = seq_len(years)), by = .(years, start_pct, sim_num)]
# years start_pct sim_num ob_num
# 1: 1 0 1 1
# 2: 1 0 2 1
# 3: 1 0 3 1
# 4: 1 0 4 1
# 5: 1 0 5 1
# ---
#5639996: 47 99 50 43
#5639997: 47 99 50 44
#5639998: 47 99 50 45
#5639999: 47 99 50 46
#5640000: 47 99 50 47