Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.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表中要更改的列的名称?_R_Data.table - Fatal编程技术网

如何在不更改原始对象的情况下,动态指定r.data表中要更改的列的名称?

如何在不更改原始对象的情况下,动态指定r.data表中要更改的列的名称?,r,data.table,R,Data.table,我有Rdata.table对象,我想打印出data.table,并对其中一列(我动态指定)进行一些更改 示例: 让我们创建一个data.table,如: DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9) 我想把y列或v列增加1,在不改变实际DT的情况下看到结果 如果我可以更改DT,我可以运行: col_to_change = 'y' DT[, c(col_to_change) := list(get(col_to_

我有R
data.table
对象,我想打印出data.table,并对其中一列(我动态指定)进行一些更改

示例:

让我们创建一个data.table,如:

DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9)
我想把y列或v列增加1,在不改变实际DT的情况下看到结果

如果我可以更改DT,我可以运行:

col_to_change = 'y'
DT[, c(col_to_change) := list(get(col_to_change) + 1)]
DT
但是,我不想对DT进行更改。我可以通过制作表的副本,然后调整更改的对象来解决此问题,例如:

DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9)
DT2 <- copy(DT)
DT2[, c(col_to_change) := list(get(col_to_change) + 1)]
DT2
DT2 <- copy(DT)
DT2[, c(col_to_change) := list(get(col_to_change) + 1)]
DT2
我希望能够做到这一点,而不必首先复制DT,因此最终我会得到如下结果:

finalDT <- rbindlist(list(DT, DT[, <<magic goes here>>]))

finalDT可能是DT[,c(.SD,((NEW=get(col)+1))]我希望变量具有原始名称您的意思是在同一个表中,您希望新旧列并排进行比较,但新旧列具有相同的名称?然后可能是DT[,c(.SD,setNames(list(get(col)+1),col])。不确定是否会有警告。不要在电脑前打电话test@chinsoon12很接近,但不完全。它添加了一个额外的列,而我希望看到相同数量的列以原始顺序包含变量。因此,类似于
orig\u name\u顺序的东西
finalDT <- rbindlist(list(DT, DT[, <<magic goes here>>]))