Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.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中动态选定列的名称标签_R_Dynamic_Data.table - Fatal编程技术网

动态设置R data.table中动态选定列的名称标签

动态设置R data.table中动态选定列的名称标签,r,dynamic,data.table,R,Dynamic,Data.table,在对data.table进行子集设置时,动态选择原始列,是否有方法动态设置一列(或更一般地多列)的名称 注意:在这种情况下,我并没有尝试为原始data.table分配新列 x <- data.table(a = 1:10, b = letters[1:10]) colname <- "b" newcolname <- "VaR" # The name of the column dymamically selected is an ugly 'V2' x[a > 7,

在对data.table进行子集设置时,动态选择原始列,是否有方法动态设置一列(或更一般地多列)的名称

注意:在这种情况下,我并没有尝试为原始data.table分配新列

x <- data.table(a = 1:10, b = letters[1:10])

colname <- "b"
newcolname <- "VaR"

# The name of the column dymamically selected is an ugly 'V2'
x[a > 7, list(a, get(colvar))]
#      a V2
# 1:  8  h
# 2:  9  i
# 3: 10  j



# I want to provide the new name of the column dynamically, but don't know how to do this.  
# This clearly doesn't work, but demonstrates the spirit of what I want to achieve:
x[a > 7, list(a, (newcolname) = get(colvar))]
给出了两个好答案,我决定将最佳答案设置为最快的方法:

> microbenchmark(setnames(x[a > 7, .(a, .SD), .SDcols = colname], 2, newcolname)[],
+ x[a > 7, setNames(list(a, get(colname)), c("a", newcolname))])
Unit: microseconds
                                                              expr     min       lq      mean    median        uq      max neval cld
 setnames(x[a > 7, .(a, .SD), .SDcols = colname], 2, newcolname)[] 974.519 1003.993 1063.5964 1031.4020 1133.5330 1428.975   100   b
     x[a > 7, setNames(list(a, get(colname)), c("a", newcolname))] 402.693  436.531  485.8323  453.9695  493.3325 1752.296   100  a 

只需动态设置列表的名称

x[a > 5, setNames(list(a, get(colname)), c("a", newcolname))]
setNames()
函数允许您命名列表中的元素。

我们可以试试

 setnames(x[a > 7, .(a, .SD), .SDcols = colname], 2, newcolname)[]

谢谢您有一个输入错误:数据i中a>7。谢谢。修正了这个问题。我不认为这个(在我看来,愚蠢的)任务需要一个基准,但如果你真的想这样做,它可能应该使用一个更大的示例表。另外,你应该在你的第一篇文章中确认速度是你的一个重要标准,而不是作为一个“获胜条件”的编辑。你们在这里太认真了。他们都是很好的答案。我只是用它来选择两个好答案,否则很难从中选出最佳答案。这不是一个大交易,而且对于记录来说,如果您将data.table扩展到更多行,则会出现大致相同的结果。
 setnames(x[a > 7, .(a, .SD), .SDcols = colname], 2, newcolname)[]