R-加速回路

R-加速回路,r,performance,loops,R,Performance,Loops,我想知道这个循环是否可以加快,我想知道你是否可以帮我解决这个问题 我用了所有的技巧,但我仍然认为这还不够 问题在于将一年df的金额从下一年df中减去。我有两个数据帧: df_2016 <- data.frame( subject = rep(1:195, 65*39), items = rep(1:39, 195*65), sub_items = rep(1:65, 195*39), value = sample(1:100000000,(195*65*39)), pe

我想知道这个循环是否可以加快,我想知道你是否可以帮我解决这个问题

我用了所有的技巧,但我仍然认为这还不够

问题在于将一年df的金额从下一年df中减去。我有两个数据帧:

df_2016 <- data.frame(
  subject = rep(1:195, 65*39),
  items = rep(1:39, 195*65),
  sub_items = rep(1:65, 195*39),
  value = sample(1:100000000,(195*65*39)),
  period = rep("2016",(195*65*39)))

   df_2016 <- df_2016[sample(1:(195*65*39),450000),] # See Reference "A" below

df_2017 <- data.frame(
  subject = rep(1:195, 65*39),
  items = rep(1:39, 195*65),
  sub_items = rep(1:65, 195*39),
  value = sample(1:100000000,(195*65*39)),
  period = rep("2017",(195*65*39)))

df_2016您的问题在于数据的生成。
主题
项目
子项目
的构造不会导致
主题
项目
子项目
的唯一组合,从而违反您的假设:

没有重复的行

我已尝试使用
expand.grid()
函数创建另一版本的数据,该数据具有
subject
items
sub_items
的独特组合

DF2016 <- data.frame(expand.grid(1:195,1:65,1:39), 
                     value = sample(1:100000000,(195*65*39)),
                     period = rep("2016",(195*65*39)))

DF2016 <- DF2016[sample(1:(195*65*39),450000),]

DF2017 <- data.frame(expand.grid(1:195,1:65,1:39), 
                     value = sample(1:100000000,(195*65*39)),
                     period = rep("2017",(195*65*39)))
2017年的值表示为
value.x
,2016年的值表示为
value.y
。这就产生了

> head(res)
  Var1 Var2 Var3  value.x period.x  value.y period.y difference
1    1    1    1 94920289     2017 84618631     2016   10301658
2    2    1    1 31008444     2017 87524572     2016  -56516128
3    3    1    1 44687050     2017       NA     <NA>         NA
4    4    1    1 87458715     2017 83105988     2016    4352727
5    5    1    1 40977802     2017 22528409     2016   18449393
6    6    1    1 80460053     2017       NA     <NA>         NA
>头部(res)
Var1 Var2 Var3 value.x period.x value.y period.y差异
1    1    1    1 94920289     2017 84618631     2016   10301658
2    2    1    1 31008444     2017 87524572     2016  -56516128
3 3 1 44687050 2017年不适用
4    4    1    1 87458715     2017 83105988     2016    4352727
5    5    1    1 40977802     2017 22528409     2016   18449393
6180180460053 2017年不适用

您的问题在于数据的生成。
主题
项目
子项目
的构造不会导致
主题
项目
子项目
的唯一组合,从而违反您的假设:

没有重复的行

我已尝试使用
expand.grid()
函数创建另一版本的数据,该数据具有
subject
items
sub_items
的独特组合

DF2016 <- data.frame(expand.grid(1:195,1:65,1:39), 
                     value = sample(1:100000000,(195*65*39)),
                     period = rep("2016",(195*65*39)))

DF2016 <- DF2016[sample(1:(195*65*39),450000),]

DF2017 <- data.frame(expand.grid(1:195,1:65,1:39), 
                     value = sample(1:100000000,(195*65*39)),
                     period = rep("2017",(195*65*39)))
2017年的值表示为
value.x
,2016年的值表示为
value.y
。这就产生了

> head(res)
  Var1 Var2 Var3  value.x period.x  value.y period.y difference
1    1    1    1 94920289     2017 84618631     2016   10301658
2    2    1    1 31008444     2017 87524572     2016  -56516128
3    3    1    1 44687050     2017       NA     <NA>         NA
4    4    1    1 87458715     2017 83105988     2016    4352727
5    5    1    1 40977802     2017 22528409     2016   18449393
6    6    1    1 80460053     2017       NA     <NA>         NA
>头部(res)
Var1 Var2 Var3 value.x period.x value.y period.y差异
1    1    1    1 94920289     2017 84618631     2016   10301658
2    2    1    1 31008444     2017 87524572     2016  -56516128
3 3 1 44687050 2017年不适用
4    4    1    1 87458715     2017 83105988     2016    4352727
5    5    1    1 40977802     2017 22528409     2016   18449393
6180180460053 2017年不适用

只需合并两个数据帧并跨列运行所需的计算。提示:思考data.table当您思考速度时,是否愿意发布结果以便我确定最终输出?只需合并两个数据帧并跨列运行所需的计算。提示:思考data.table当您思考速度时,要不要公布结果,这样我才能确定最终的输出?你是对的,我犯了一个错误:主体var应该是195乘以1,然后是195乘以2,依此类推。最后,虽然堆栈溢出请不要感谢,但我非常感谢您。你的帮助非常有用。你是对的,我犯了一个错误:主题变量应该是195乘以1,然后是195乘以2,依此类推。最后,虽然堆栈溢出请不要感谢,但我非常感谢您。你的帮助非常有用。