R data.table:不能混合正面和负面

时间:2016-01-29 05:44:13

标签: r data.table

我想从下面20中特定列(例如dist列)的每一行中减去一个整数(例如data.table):

require(data.table)
CARS <- data.table(cars)
head(CARS)
   speed dist
1:     4    2
2:     4   10
3:     7    4
4:     7   22
5:     8   16
6:     9   10
> CARS[CARS$dist - 20,]
Error in `[.data.table`(CARS, CARS$dist - 20, ) : 
  Item 1 of i is -18 and item 4 is 2. Cannot mix positives and negatives.

看起来data.table不喜欢混合正数和负数。我的对象CARS的类是:

class(CARS)
# [1] "data.table" "data.frame"

在基准测试方面,我希望我的代码尽可能快地运行。因此,很高兴看到是否有一些替代可能的解决方案,以性能速度为基础进行基准测试。

2 个答案:

答案 0 :(得分:5)

您正在将结果传递给var dic = jaggedList.GroupBy(lst => string.Join(" ", lst.Take(2))) .ToDictionary(el => el.Key, el => el.Count()); 的{​​{1}}变量。你不能在这里混合使用负值(下降行)和正值。

您收到与data.frame

类似的错误
i

您的问题建议您要将参数传递给[.data.table(并使用 x <- data.frame(x=1:5) x[-1:2] # Error in `[.default`(x, -1:2) : # only 0's may be mixed with negative subscripts y <- data.table(x=1:5) y[-1:2,] # Error in `[.data.table`(y, -1:2, ) : # Item 1 of i is -1 and item 3 is 1. Cannot mix positives and negatives. 您不需要j前缀

data.table

答案 1 :(得分:-1)

如果您的目标是将所有负数替换为0,那么一个简单的解决方案就是:

CARS[(dist - 20)<=0,dist:=0]

CARS[(dist - 20)>0,dist:dist-20]