Правильное использование оператора двоеточия - PullRequest
0 голосов
/ 25 июня 2019

Я использовал: = в 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 ]

4 голосов
/ 25 июня 2019

:= работает только в 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]
0 голосов
/ 25 июня 2019

Исправлена ​​проблема с использованием fread вместо read.csv при загрузке набора данных, и она работает с функцией: =.

Также здесь размещена полезная ссылка для понимания fread и read.csv:

Причина скорости фреда в пакете data.table в R

...