Мне нужно посмотреть, как я могу обновить значения фрейма данных в R на основе условия, а затем использовать запрос к SQL Server, чтобы выполнить вычисления и заменить это значение в фрейме данных.
Прямо сейчас, например, мой фрейм данных выглядит так:
empID name description annl_salary
123 John driver 0
789 Smith temp 0
246 Joe manager 60000
Таким образом, в основном, например, любой пользователь, который является «временным», в столбце annl_salary для него всегда будет отображаться 0, но для описания «драйвер» иногда будет 0 для этого описания, и поэтому мне нужно посмотреть, есть ли способ к:
Проверьте, есть ли какие-либо значения 0 в столбце annl_salary, где описание НЕ равно «temp».
Если они есть, запустите SQL-запрос, чтобы рассчитать зарплату и обновить значение 0 в фрейме данных для каждого конкретного пользователя, который имеет зарплату 0 и не является временным
Я все еще новичок в 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"}
Я ищу решение R
Просто сделай with(data, annl_salary == 0 & description != 'temp')
Хорошо, я понимаю, если я использую это, как я включу часть, где, если какая-либо строка соответствует этому условию, затем запустить оператор SQL в R, используя RODBC для обновления этих полей?
Ваша терминология сбивает с толку. фрейм данных находится в R. Обновление фрейма данных выполняется внутри R. У вас также есть источник данных, который может быть файлом Excel или может быть базой данных SQL Server - это неясно в вашем вопросе. Ваш код показывает исходный файл Excel, но ваш текст говорит о SQL Server. Если вы хотите обновить таблицу в базе данных SQL, лучше всего использовать код SQL, а не код R. (Хотя вы можете запустить команду SQL из R, если хотите.) Если все, что вам нужно, это файл Excel, то более простой рабочий процесс может пропустить SQL. Но похоже, что ваши технологии смешения ни с того ни с сего.
То есть, если все, что вы, В самом деле, хотите сделать, это обновить таблицу в базе данных SQL и получить ее экспорт в Excel, я не уверен, почему вы должны использовать R для запуска команд SQL. Это имело бы смысл, если бы вы уже освоились с R и RODBC, и это был простой способ сделать это, но здесь это не так.
Я согласен с @Грегором. Вы должны иметь возможность сделать это напрямую, и это будет быстрее/эффективнее. Обновление в базах данных должно многое делать за капотом
Извините, если я сделал это немного запутанным, на самом деле я не пытаюсь обновить реальную таблицу SQL Server, а только электронную таблицу. В основном я извлекаю данные из SQL Server и помещаю их в электронную таблицу, а затем оттуда, причина, по которой мне нужно ссылаться на RODBC и SQL Server, заключается в том, что мне нужно обновить только эту электронную таблицу, исправляя значения 0, выполняя вычисления через SQL Server, но я не обновляю никакие фактические таблицы, только данные в файле xlsx.
Вы говорите о SQL-запросе для расчета зарплаты, как это должно происходить?
Все еще непонятно, почему вы вообще упоминаете SQL Server. Похоже, ваша цель — обновить электронную таблицу. У вас есть или вы можете получить нужные значения в R? Если да, то нам все равно, откуда они берутся или как вы их получили, и мы можем сосредоточиться на передаче значений из R в электронную таблицу, которая мая включает RODBC, но, вероятно, не будет использовать SQL Server.
Я бы попробовал что-то подобное, но это трудно понять, не понимая структуру базы данных 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)
Вы ищете
sql
решение илиR