Мне дали большой csv, который состоит из 115 столбцов и 1000 строк. Столбцы содержат различные данные, некоторые из которых основаны на символах, некоторые являются целыми числами и т. д. Однако данные содержат МНОГО нулевых переменных различных типов (NA, -999, NULL и т. д.).
Что я хочу сделать, так это написать сценарий, который будет генерировать СПИСОК столбцов, где более 30% данных в столбце являются NULL некоторого типа.
Для этого я написал скрипт, который дает мне нулевой процент (в виде десятичного числа) для одного столбца. У меня этот скрипт работает нормально.
length(which(indata$ObservationYear == "" | is.na(indata$ObservationYear) |
indata$ObservationYear == "NA" | indata$ObservationYear == "-999" |
indata$ObservationYear == "0"))/nrow(indata)
Я хочу написать скрипт, чтобы сделать это для всех столбцов. Я считаю, что мне нужно использовать функцию lapply.
Я попытался сделать это здесь, однако я не могу заставить этот скрипт работать вообще:
Null_Counter <- lapply(indata, 2, length(x),
length(which(indata == "" | is.na(indata) | indata == "NA" | indata == "-999" | indata == "0")))
names(indata(which(0.3>=Null_Counter / nrow(indata))))
Я получаю следующие ошибки:
Error in match.fun(FUN) : '2' is not a function, character or symbol
а также:
Error: could not find function "indata"
В идеале я хочу, чтобы он дал мне векторный СПИСОК всех имен столбцов, где процент всех нулевых переменных (NA, -999, 0, NULL) превышает 30%.
Кто-нибудь может помочь?
lapply
не нуженMARGIN
. Это дляapply
. Вы можете проверить примеры в?lapply
- person akrun   schedule 02.06.2015