Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 基于data.table中的.SD cols创建许多新列_R_Data.table - Fatal编程技术网

R 基于data.table中的.SD cols创建许多新列

R 基于data.table中的.SD cols创建许多新列,r,data.table,R,Data.table,我知道一定有一个很好的方法来处理data.table,但我很难弄明白。我想创建一组基于当前列算法的新列 例如,我有一个data.table,其中包含“a_num,a_denom,b_num,b_denom…”等列,我希望执行以下操作: DT[,a_ratio := a_num / a_denom] DT[, paste0(.SD, '_ratio') := paste0(.SD, '_num') / paste0(.SD, '_denom'), .SDcols = c('a', 'b', 'c

我知道一定有一个很好的方法来处理data.table,但我很难弄明白。我想创建一组基于当前列算法的新列

例如,我有一个data.table,其中包含“a_num,a_denom,b_num,b_denom…”等列,我希望执行以下操作:

DT[,a_ratio := a_num / a_denom]
DT[, paste0(.SD, '_ratio') := paste0(.SD, '_num') / paste0(.SD, '_denom'), .SDcols = c('a', 'b', 'c')]
除了我想为a,b,c,d做这些。。。z

我认为答案应该是这样的:

DT[,a_ratio := a_num / a_denom]
DT[, paste0(.SD, '_ratio') := paste0(.SD, '_num') / paste0(.SD, '_denom'), .SDcols = c('a', 'b', 'c')]

但这似乎对我根本不起作用。

如果你只是这样做会怎么样:
DT[,endsWith(names(DT),“num”)]/DT[,endsWith(names(DT),“denom”)]
?除非数据集很大,否则你最好先重塑数据。无论如何,我认为您的方法的关键问题是:。SD不是一个字符向量,它是一个data.table,而您似乎想使用字符向量在a/b/c上循环。在您的情况下,我将使用for循环;正如MichaelChirico提到的,使用
get
,你也会受益匪浅,prob DT[,(paste0(字母,u比率)):=lappy(字母,函数(x)get(paste0(x,u num'))/get(paste0(x,u denom'))]哇,我在挣扎,我不知道如何选择答案,但谢谢大家!Chinsoon12的答案在我看来是最好的,而且确实有效!仅供参考,这里发布了一个功能请求:(我认为按照Michael的建议进行重塑是一条路,fwiw。)