【问题标题】:R data.table - new column with ':=' and keep existing columnR data.table - 带有':='的新列并保留现有列
【发布时间】:2020-01-26 21:00:36
【问题描述】:

是否可以在语句中创建一个新列并保留(少数)现有列?例如创建“x”列,然后保留“x”和“mpg”列

dt <- data.table(mtcars)

dt[,x:=mpg]

dt[,.(x,mpg)]

【问题讨论】:

  • 是否需要修改原始对象,如果不小心可能会很危险
  • 我完全同意。不建议更新原始对象。我有一种情况,处理时间的微小节省会增加价值。

标签: r data.table


【解决方案1】:

如果你想通过引用进行替换,使用:= 那么你可以这样做

dt[, x:=mpg][, setdiff(colnames(dt), c('x', 'mpg')) := NULL]

【讨论】:

    【解决方案2】:

    如果我们在一个步骤中需要它,而不是使用:= 来修改原始数据集,而是在list.( 中使用= 指定它

    dt[,.(x = mpg, mpg)]
    

    或者如果需要在原始数据集中创建列,可以通过管道传输

    dt[, x := mpg][, .(x, mpg)]
    

    如果我们想更新原始对象中的列,另一个选项是set

    set(dt[, x:= mpg], i = NULL, j = names(dt)[!names(dt) %in% c('x', 'mpg')], value = NULL)
    

    【讨论】:

    • 从性能角度来看,哪个选项更有效?我假设选项#1 需要将输出分配回原始数据表。对? dt
    • @R007 := 更快,但你也在进行子集化。你能用microbenchmark查看更大的数据集吗?
    猜你喜欢
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    相关资源
    最近更新 更多