Хобрук: Ваш путь к мастерству в программировании

как вернуть конкретный вывод, связанный с выполнением условий, используя таблицу данных R

я пытаюсь использовать пакет таблицы данных. Я хочу найти способ создать новый столбец на основе определенных условий в трех переменных, связанных с расчетом.

#this is my dataset  
dput(dt[1:5])
structure(list(cashtype = c("", "", "", "", ""), quantity = c(1200000, 
1400000, 2400000, 2500000, 810000), price_mid = c(100.0385, 102.5583, 
92.7059, 108.515, 113.8505), value_mid = c(1200462.3, 1189302.74, 
2224941.6, 2712875, 922189.41), currency_price = c("GBP", "EUR", 
"GBP", "GBP", "GBP"), currency_value = c("GBP", "GBP", "GBP", 
"GBP", "GBP")), class = c("data.table", "data.frame"), row.names = c(NA, 
-5L), .internal.selfref = <pointer: 0x15f28c0>)`

Мне нужно проверить расчеты для этого большого набора данных. не все числа складываются. но у меня есть способ проверить это. который представляет собой столбец «value_mid», разделенный на «количество», умноженный на 100. Это должно составить столбец price_mid. используя столбец, допустимый для проверки. после этого я хотел бы в идеале превратить «действительные» наблюдения в «Истинные», которые соответствуют «price_mid», а те, которые не соответствуют «Ложным».

dt[,valid:= (value_mid/quantity)*100]

Я не уверен, как использовать функцию ifelse в datatable. находил это запутанным. Благодарность

14.06.2020

Ответы:


1

Это то, что вы ищете?

dt[,valid := price_mid == (value_mid/quantity)*100][]
   cashtype quantity price_mid value_mid currency_price currency_value valid
1:           1200000  100.0385 1200462.3            GBP            GBP FALSE
2:           1400000  102.5583 1189302.7            EUR            GBP FALSE
3:           2400000   92.7059 2224941.6            GBP            GBP FALSE
4:           2500000  108.5150 2712875.0            GBP            GBP  TRUE
5:            810000  113.8505  922189.4            GBP            GBP FALSE

Чтобы обойти проблемы с округлением, вы можете попробовать что-нибудь с round:

dt[,valid := round(price_mid,4) == round((value_mid/quantity)*100,4)][]
   cashtype quantity price_mid value_mid currency_price currency_value valid
1:           1200000  100.0385 1200462.3            GBP            GBP  TRUE
2:           1400000  102.5583 1189302.7            EUR            GBP FALSE
3:           2400000   92.7059 2224941.6            GBP            GBP  TRUE
4:           2500000  108.5150 2712875.0            GBP            GBP  TRUE
5:            810000  113.8505  922189.4            GBP            GBP  TRUE
14.06.2020
  • Благодарю за ваш ответ. это работает нормально. моя проблема заключается в том, что R округляет значащие цифры числа. если вы выполните операцию (значение/количество, затем *100) в калькуляторе, вы должны получить 100,038525. но R раундов. как бы мне исправить эту проблему? поскольку оно оказывается ложным в некоторых случаях, когда оно должно быть правдой. Спасибо. 14.06.2020
  • отлично работает @IanCampbell. Ты мужчина. Спасибо 14.06.2020
  • Привет, очень похожая проблема, что и раньше. некоторые значения в калькуляторе округляются, так как по-прежнему получают значение false. любые другие потенциальные предложения большое спасибо 15.06.2020
  • Новые материалы

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...