冒号等于运算符的正确用法

时间:2019-06-24 21:15:24

标签: r data.table data-science

我在R中使用:=来对数据集执行一些操作,但是我实现的用法引发了错误。

我尝试使用c()之类的其他函数来创建子集,但是我需要高效的东西,显然:=应该为我完成工作。使用子集功能,我有很多中间数据帧,这些中间数据帧当然是不必要的。

#preprocessing steps for getting rid of the null values rows 
df_data[Quantity<=0,Quantity:=NA]
df_data[UnitPrice<=0,UnitPrice:=NA]
df_data <- na.omit(df_data)

(从控制台):

> df_data[Quantity<=0,Quantity:=NA]
Error in `:=`(Quantity, NA) : 
 Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, once only and in particular ways. See help(":=").

2 个答案:

答案 0 :(得分:4)

:=仅适用于data.tables

这应该有效

df_data <- data.table(Quantity = -5:5)
df_data[Quantity<=0,Quantity:=NA]
na.omit(df_data)

这将产生错误

df_data <- data.frame(Quantity = -5:5)
df_data[Quantity<=0,Quantity:=NA]
na.omit(df_data)

也就是说,如果您只滤除小于0的值,则可以进行

df_data <- df_data[Quantity > 0 & UnitPrice > 0]

答案 1 :(得分:-3)

现在通过在加载数据集时使用fread而不是read.csv来解决此问题,它可以与:=函数一起使用。

此外,在这里,发布了一个有用的链接,用于了解fread和read.csv:

Reason behind speed of fread in data.table package in R