使用data.table通过引用对行进行子分配

博维尔上校

我有以下data.table:

DT1 <- data.table(col1 = c(1,2,3,4,5,6,7), col2 = letters[1:7], col3 = rep(TRUE,7))

   col1 col2 col3
1:    1    a TRUE
2:    2    b TRUE
3:    3    c TRUE
4:    4    d TRUE
5:    5    e TRUE
6:    6    f TRUE
7:    7    g TRUE

然后我定义:

vec <- c(2,5,6)

与:

DT1[col1 == vec, col3 := FALSE]

我得到:

   col1 col2  col3
1:    1    a  TRUE
2:    2    b  TRUE
3:    3    c  TRUE
4:    4    d  TRUE
5:    5    e FALSE
6:    6    f FALSE
7:    7    g  TRUE

我希望col3将第二行设置为FALSE此处,事实并非如此。

但是例如,这按我预期的那样工作:

DT1[vec, col3 := FALSE]

我想念什么?

香波

data.table的格式DT[i,j,by]i意义location / wherej意义select / update / compute / assignby含义group by

因此,您在这里犯的错误如下:

在您的作业中:DT1[col1==vec, ...]part等效于以下索引:

DT1$col1 == vec  

这就如同比较元件col1的柱DT1vec由于vec只有3个元素,因此将这些元素进行翻转,并且由于您vec和中的特定值col1,因此第5个元素和第6个元素在翻转后变为TRUE。

做您想做的正确方法是:

方法1 :(首选)

DT1[vec, col3 := FALSE]

方法2 :(与data.frame等效,但对data.table则不推荐使用)

DT1$col3[vec] <- FALSE

或者,以下方法也将起作用:

DT1[vec]$col3 <- FALSE

方法3:这是另一种可能性(尽管比第一种方法慢):

DT1[col1 %in% vec, col3 := FALSE]

希望这可以帮助!!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用:=处理复杂公式(通过引用分配data.table)

来自分类Dev

按组和逻辑表达式对行进行子设置-data.table

来自分类Dev

使用data.table包通过引用进行条件二进制连接和更新

来自分类Dev

使用lapply通过引用对data.table进行赋值,并返回其余的列

来自分类Dev

使用data.table分配互相引用的多个变量

来自分类Dev

使用data.table分配互相引用的多个变量

来自分类Dev

如何通过使用特定值对行进行分组来拆分数据框并创建子数据框?

来自分类Dev

使用data.table`:=`进行动态分配

来自分类Dev

使用 data.table 列中的参数通过引用更新

来自分类Dev

通过data.table中的变量名称引用和分配列

来自分类Dev

使用grep对data.table中的子集行进行比较,比较行内容

来自分类Dev

通过赋值列对data.frame中的行进行聚合

来自分类Dev

在事件之前对行进行计数-data.table

来自分类Dev

对data.table的每一行进行回归

来自分类Dev

以特定顺序对data.table中的行进行排序

来自分类Dev

使用Python通过蓝牙串行进行通信

来自分类Dev

使用split函数通过逗号分隔的行进行解析

来自分类Dev

r data.table:在for循环中通过引用进行子集和赋值

来自分类Dev

data.table的`:=`运算符是否真的通过引用进行操作?

来自分类Dev

通过引用现有列中的字符串将值分配给data.table中的新列

来自分类Dev

通过dplyr中的多列索引/键进行子设置(具有data.table soln)

来自分类Dev

通过子字符串向量对data.table进行子集

来自分类Dev

data.table使用逻辑列对行进行设置:为什么我必须显式比较TRUE?

来自分类Dev

R-Data.table-使用负位置通过引用删除列

来自分类Dev

使用data.table进行汇总

来自分类Dev

使用data.table进行汇总

来自分类Dev

顺序组通过使用data.table

来自分类Dev

顺序组通过使用data.table

来自分类Dev

带有setkey的data.table默认外部联接,对行进行计数(表键频率)

Related 相关文章

  1. 1

    使用:=处理复杂公式(通过引用分配data.table)

  2. 2

    按组和逻辑表达式对行进行子设置-data.table

  3. 3

    使用data.table包通过引用进行条件二进制连接和更新

  4. 4

    使用lapply通过引用对data.table进行赋值,并返回其余的列

  5. 5

    使用data.table分配互相引用的多个变量

  6. 6

    使用data.table分配互相引用的多个变量

  7. 7

    如何通过使用特定值对行进行分组来拆分数据框并创建子数据框?

  8. 8

    使用data.table`:=`进行动态分配

  9. 9

    使用 data.table 列中的参数通过引用更新

  10. 10

    通过data.table中的变量名称引用和分配列

  11. 11

    使用grep对data.table中的子集行进行比较,比较行内容

  12. 12

    通过赋值列对data.frame中的行进行聚合

  13. 13

    在事件之前对行进行计数-data.table

  14. 14

    对data.table的每一行进行回归

  15. 15

    以特定顺序对data.table中的行进行排序

  16. 16

    使用Python通过蓝牙串行进行通信

  17. 17

    使用split函数通过逗号分隔的行进行解析

  18. 18

    r data.table:在for循环中通过引用进行子集和赋值

  19. 19

    data.table的`:=`运算符是否真的通过引用进行操作?

  20. 20

    通过引用现有列中的字符串将值分配给data.table中的新列

  21. 21

    通过dplyr中的多列索引/键进行子设置(具有data.table soln)

  22. 22

    通过子字符串向量对data.table进行子集

  23. 23

    data.table使用逻辑列对行进行设置:为什么我必须显式比较TRUE?

  24. 24

    R-Data.table-使用负位置通过引用删除列

  25. 25

    使用data.table进行汇总

  26. 26

    使用data.table进行汇总

  27. 27

    顺序组通过使用data.table

  28. 28

    顺序组通过使用data.table

  29. 29

    带有setkey的data.table默认外部联接,对行进行计数(表键频率)

热门标签

归档