【问题标题】:Conditionally replacing column values with data.table有条件地用 data.table 替换列值
【发布时间】:2014-08-23 13:52:20
【问题描述】:

我有以下data.table:

dt <- data.table(col1 = rep("a",6), col2 = c(1,1,1,2,3,1))

现在我想用值“bigDog”替换 col2 中的所有 1。我可以使用 data.frame 精神做到这一点:

dt$col2[dt$col2==1,] <- "bigDog"

但我想知道是否有不同的方式,更多“面向data.table”

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    此外,您还可以使用库 plyr

    library(data.table)
    library(plyr)
    dt <- data.table(col1 = rep("a",6), col2 = c(1,1,1,2,3,1))
    dt <- mapvalues(dt[,col2], c(1), c("BigDog"))
    

    【讨论】:

      【解决方案2】:

      如果您不想更改列的类型,您可以这样做:

      dt[col2 == 1, col2 := 123]
      

      随着类型的改变,你可以这样做:

      dt[, col2 := as.character(col2)][col2 == "1", col2 := "bigDog"]
      

      如果您不先更改类型,“bigDog”将被强制转换为整数,即NA。当然,您还会收到一堆警告。

      请注意,除了不那么繁琐的语法之外,使用:= 的优点是不会制作额外的数据副本(就像&lt;- 那样),而是在原地修改。

      【讨论】:

      • 假设我不想更改列类型,如何将第一个用法应用于多个(命名)列?
      • @rimorob 确定 - dt[condition,`:=`(col2 = 123, col3 = 234, ...)]
      • 如何在同一列上同时执行多个条件?例如。将 1 更改为“bigDog”,将 2 更改为“smallDog”?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      • 2016-06-07
      • 2016-11-17
      • 2023-03-15
      • 2019-02-12
      • 2021-10-15
      相关资源
      最近更新 更多