我在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(":=").
答案 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: