Arhn - архитектура программирования

Автоматически очищать плохие данные

Я создаю приложение, используя shining и openair для анализа данных о ветре.
Прямо сейчас данные должны быть «очищены» перед загрузкой пользователем. Я заинтересован в том, чтобы делать это автоматически. Часть данных пуста, часть не является числовой, поэтому построить розу ветров невозможно. Я хочу:

    1. Estimate how much of the data is not numeric
    2. Cut it out and leave only numeric data

вот пример данных:
"NO2.mg" читается как множитель, а не как int, потому что он состоит не только из чисел
OK
вот воспроизводимый пример:

no2<-factor(c(5,4,"c1",54,"c5",seq(2:50)))
no2
[1] 5  4  c1 54 c5 1  2  3  4  5  6  7  8  9  10 11 12 13 14
[20] 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
[39] 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
52 Levels: 1 10 11 12 13 14 15 16 17 18 19 2 20 21 22 ... c5
> as.numeric(no2)
[1] 45 34 51 46 52  1 12 23 34 45 47 48 49 50  2  3  4  5  6
[20]  7  8  9 10 11 13 14 15 16 17 18 19 20 21 22 24 25 26 27
[39] 28 29 30 31 32 33 35 36 37 38 39 40 41 42 43 44
07.08.2013

  • library(fortunes);fortune(206). Вам нужно будет предоставить пример вашего data. Даже тогда.... 07.08.2013
  • Как правило, мы не служба поддержки. Мы ценим, если пользователи задают четкие, конкретные вопросы и показывают, что они пробовали и где застряли. 07.08.2013

Ответы:


1

Чтобы преобразовать коэффициент в числовой, вам нужно сначала преобразовать его в символ:

no2<-factor(c(5,4,"c1",54,"c5",seq(2:50)))
no2_num <- as.numeric(as.character(no2)) 
#Warning message:
#  NAs introduced by coercion 
no2_clean <- na.omit(no2_num) #remove NAs resulting from the bad data

# [1]  5  4 54  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
# [40] 37 38 39 40 41 42 43 44 45 46 47 48 49
# attr(,"na.action")
# [1] 3 5
# attr(,"class")
# [1] "omit"

length(attr(no2_clean,"na.action"))/length(no2)*100
#[1] 3.703704
07.08.2013

2

Худшее R хайку:

Some of the data is empty, 
some of is not numeric, 
so it is not possible to build a wind rose.
07.08.2013
  • насмехается над группой программистов-супергиков --› проверить 07.08.2013
  • @eliavs - ну, вы могли бы предоставить более важную информацию по запросу Романа. Куча, казалось бы, случайных цифр, которые не воспроизводимы, не позволяют нам помочь. Например. - dput(head(ranana.analysed.no2)) может быть хорошим началом, или, что еще лучше, будет полезен полный пример, показывающий проблемный раздел ваших входных данных и ожидаемый набор выходных данных. 07.08.2013
  • @thelatemail спасибо, воспроизводимые данные важны для помощи 07.08.2013

  • 3

    Хорошо, вот как я это сделал, я уверен, что у кого-то есть лучший способ
    Я был бы рад, если бы вы поделились со мной
    это мои данные:
    no2<-factor(c(5,4,"c1",54,"c5",seq(2:50)))
    для подсчета "плохих данных:"

    sum(is.na((as.numeric(as.vector(no2)))))

    и оценить процент неверных данных:
    sum(is.na((as.numeric(as.vector(no2)))))/length(no2)*100

    07.08.2013
  • as.vector лишнее, но sum()-ing is.na() довольно стандартно. Был ли у вас интерес к восстановлению данных путем преобразования c5 в 5? 07.08.2013
  • Факторы @DWin не являются векторами, и as.vector приводит их к символу. Здесь не лишнее. 08.08.2013
  • Интересно... не знал, что as.vector будет делать то же самое, что и as.character. Но это не меняет того факта, что он лишний, потому что он передается is.na, которому все равно, числовой он или символьный. Рассмотрим: sum(is.na(factor(c(letters, NA))). Функция as.vector.factor со своими аргументами по умолчанию удаляет атрибуты уровней и преобразуется в levels(fac)[fac]. 08.08.2013
  • @DWin Но as.numeric не будет создавать NA при использовании на факторе, только при использовании на персонаже. 08.08.2013
  • Это утверждение легко опровергнуть: as.numeric( factor(c(1:3, NA))) [1] 1 2 3 NA 08.08.2013
  • @DWin Конечно, as.numeric распространяет NA. Но это не создание NA. Соответствующие случаи: as.numeric(factor(c(1:3,"a"))) против as.numeric(as.character(factor(c(1:3,"a")))) 08.08.2013
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..