首页 > 解决方案 > 使用 for 循环分配值

问题描述

R中有没有办法使用for循环在现有数据框中创建新列并将值分配给新创建的列?

s_0133_AFE_Nr_Dr_CM['CM_2018001'] = s_0133_AFE_Nr_Dr_CM$AFE_Cost_2018001/s_0133_AFE_Nr_Dr_CM$Dr_2018001
   s_0133_AFE_Nr_Dr_CM['CM_2018002'] = s_0133_AFE_Nr_Dr_CM$AFE_Cost_2018002/s_0133_AFE_Nr_Dr_CM$Dr_2018001
   s_0133_AFE_Nr_Dr_CM['CM_2018003'] = s_0133_AFE_Nr_Dr_CM$AFE_Cost_2018003/s_0133_AFE_Nr_Dr_CM$Dr_2018001
   s_0133_AFE_Nr_Dr_CM['CM_2018004'] = s_0133_AFE_Nr_Dr_CM$AFE_Cost_2018004/s_0133_AFE_Nr_Dr_CM$Dr_2018001
   s_0133_AFE_Nr_Dr_CM['CM_2018005'] = s_0133_AFE_Nr_Dr_CM$AFE_Cost_2018005/s_0133_AFE_Nr_Dr_CM$Dr_2018001
   s_0133_AFE_Nr_Dr_CM['CM_2018006'] = s_0133_AFE_Nr_Dr_CM$AFE_Cost_2018006/s_0133_AFE_Nr_Dr_CM$Dr_2018001
   s_0133_AFE_Nr_Dr_CM['CM_2018007'] = s_0133_AFE_Nr_Dr_CM$AFE_Cost_2018007/s_0133_AFE_Nr_Dr_CM$Dr_2018001
   s_0133_AFE_Nr_Dr_CM['CM_2018008'] = s_0133_AFE_Nr_Dr_CM$AFE_Cost_2018008/s_0133_AFE_Nr_Dr_CM$Dr_2018001
   s_0133_AFE_Nr_Dr_CM['CM_2018009'] = s_0133_AFE_Nr_Dr_CM$AFE_Cost_2018009/s_0133_AFE_Nr_Dr_CM$Dr_2018001
   s_0133_AFE_Nr_Dr_CM['CM_2018010'] = s_0133_AFE_Nr_Dr_CM$AFE_Cost_2018010/s_0133_AFE_Nr_Dr_CM$Dr_2018001
   s_0133_AFE_Nr_Dr_CM['CM_2018011'] = s_0133_AFE_Nr_Dr_CM$AFE_Cost_2018011/s_0133_AFE_Nr_Dr_CM$Dr_2018001
   s_0133_AFE_Nr_Dr_CM['CM_2018012'] = s_0133_AFE_Nr_Dr_CM$AFE_Cost_2018012/s_0133_AFE_Nr_Dr_CM$Dr_2018001

这可以用一些循环写成 1 行吗?请注意,我们通过创建新列来分配值。我尝试使用 assing() 函数,但它 R 在数据框之外创建新变量,而不是将其添加到同一数据框中

标签: rdataframefor-loopvariable-assignment

解决方案


你当然可以。只需分配多个列paste0以及一系列数字:

s_0133_AFE_Nr_Dr_CM[paste0("CM_", 2018001:2018012)] <- s_0133_AFE_Nr_Dr_CM[paste0("AFE_Cost_", 2018001:2018012)]/s_0133_AFE_Nr_Dr_CM$Dr_2018001

推荐阅读