Как обновить значения фрейма данных в зависимости от условий?

Мне нужно посмотреть, как я могу обновить значения фрейма данных в R на основе условия, а затем использовать запрос к SQL Server, чтобы выполнить вычисления и заменить это значение в фрейме данных.

Прямо сейчас, например, мой фрейм данных выглядит так:

empID     name     description     annl_salary
123       John     driver          0
789       Smith    temp            0
246       Joe      manager         60000

Таким образом, в основном, например, любой пользователь, который является «временным», в столбце annl_salary для него всегда будет отображаться 0, но для описания «драйвер» иногда будет 0 для этого описания, и поэтому мне нужно посмотреть, есть ли способ к:

  1. Проверьте, есть ли какие-либо значения 0 в столбце annl_salary, где описание НЕ равно «temp».

  2. Если они есть, запустите SQL-запрос, чтобы рассчитать зарплату и обновить значение 0 в фрейме данных для каждого конкретного пользователя, который имеет зарплату 0 и не является временным

  3. Затем отсортируйте фрейм данных по annl_salary и описанию в порядке возрастания и экспортируйте в файл xlsx.

Я все еще новичок в R, и пока у меня есть это, но я застрял:

library(RODBC)
library(xlsx)

data <- read.xlsx("Book1.xlsx", sheetName = "Sheet1")

if (data$annl_salary == 0 & data$description != "temp"){data$annl_salary = "SQL Query from RODBC to update the values for each user with 0 and not driver"}

Вы ищете sql решение или R

akrun 30.05.2019 16:04

Я ищу решение R

jwalls91 30.05.2019 16:04

Просто сделай with(data, annl_salary == 0 & description != 'temp')

akrun 30.05.2019 16:05

Хорошо, я понимаю, если я использую это, как я включу часть, где, если какая-либо строка соответствует этому условию, затем запустить оператор SQL в R, используя RODBC для обновления этих полей?

jwalls91 30.05.2019 16:08

Ваша терминология сбивает с толку. фрейм данных находится в R. Обновление фрейма данных выполняется внутри R. У вас также есть источник данных, который может быть файлом Excel или может быть базой данных SQL Server - это неясно в вашем вопросе. Ваш код показывает исходный файл Excel, но ваш текст говорит о SQL Server. Если вы хотите обновить таблицу в базе данных SQL, лучше всего использовать код SQL, а не код R. (Хотя вы можете запустить команду SQL из R, если хотите.) Если все, что вам нужно, это файл Excel, то более простой рабочий процесс может пропустить SQL. Но похоже, что ваши технологии смешения ни с того ни с сего.

Gregor Thomas 30.05.2019 16:31

То есть, если все, что вы, В самом деле, хотите сделать, это обновить таблицу в базе данных SQL и получить ее экспорт в Excel, я не уверен, почему вы должны использовать R для запуска команд SQL. Это имело бы смысл, если бы вы уже освоились с R и RODBC, и это был простой способ сделать это, но здесь это не так.

Gregor Thomas 30.05.2019 16:32

Я согласен с @Грегором. Вы должны иметь возможность сделать это напрямую, и это будет быстрее/эффективнее. Обновление в базах данных должно многое делать за капотом

akrun 30.05.2019 16:53

Извините, если я сделал это немного запутанным, на самом деле я не пытаюсь обновить реальную таблицу SQL Server, а только электронную таблицу. В основном я извлекаю данные из SQL Server и помещаю их в электронную таблицу, а затем оттуда, причина, по которой мне нужно ссылаться на RODBC и SQL Server, заключается в том, что мне нужно обновить только эту электронную таблицу, исправляя значения 0, выполняя вычисления через SQL Server, но я не обновляю никакие фактические таблицы, только данные в файле xlsx.

jwalls91 30.05.2019 16:57

Вы говорите о SQL-запросе для расчета зарплаты, как это должно происходить?

Noah Olsen 30.05.2019 17:12

Все еще непонятно, почему вы вообще упоминаете SQL Server. Похоже, ваша цель — обновить электронную таблицу. У вас есть или вы можете получить нужные значения в R? Если да, то нам все равно, откуда они берутся или как вы их получили, и мы можем сосредоточиться на передаче значений из R в электронную таблицу, которая мая включает RODBC, но, вероятно, не будет использовать SQL Server.

Gregor Thomas 30.05.2019 17:23
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
10
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы попробовал что-то подобное, но это трудно понять, не понимая структуру базы данных SQL, которую вам нужно запрашивать.

library(RODBC)

channel <- odbcConnect("database")
sqlQuery(channel, paste("SQL QUERY"))

data$annl_salary <- ifelse(data$description != 'Temp' & data$annl_salary == 0, query, data$annl_salary)

data <- data %>%
    arrange(annl_salary)

Другие вопросы по теме