R 构建数据帧/数据表的有效方法
我有一个data.frame,用于设置模拟参数R 构建数据帧/数据表的有效方法,r,dataframe,data.table,R,Dataframe,Data.table,我有一个data.frame,用于设置模拟参数 states_grid <- expand.grid(years = c(1:47), start_pct = c(0:99), sim_num = c(1:50)) 然而,我想不出一个有效的方法来创建这个数据帧 想法 编辑:我试过下面的建议,但似乎不行 下面的代码返回相同大小(235000)行的data.table states\u grid您的意思是states\u grid中的每一行都应该复制年次,然后创建一个新列ob\u num,其
states_grid <- expand.grid(years = c(1:47), start_pct = c(0:99), sim_num = c(1:50))
然而,我想不出一个有效的方法来创建这个数据帧
想法
编辑:我试过下面的建议,但似乎不行
下面的代码返回相同大小(235000)行的data.table
states\u grid
您的意思是states\u grid
中的每一行都应该复制年
次,然后创建一个新列ob\u num
,其中包含从1到年的序列
?TrysetDT(states\u grid)[,ob num:=1.N,by=years][/code>自库(data.table)
创建一个单独的数据表非常有效。表由sim_num
和ob_num
键控。您总是可以将年数
和开始pct
(因为它们完全由sim_num
决定)。弗兰克,我不确定您的意思,但很乐意了解更多。仅供参考-由于时间限制,我最终在Rcpp中写了这篇文章,但更重要的是要了解是否有一种方法可以有效地处理这个问题(也许是Frank的解决方案!)。您希望它返回多少行?你能展示一个小的前后示例吗?谢谢你,先生!我认为有一种简单/有效的方法可以做到这一点
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
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][]
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