Я хочу найти значение из базы данных и создать несколько новых столбцов в файле. на самом деле у меня есть такой файл
promo code item stok
sale1 100 a 200
sale2 101 b 300
sale3 102 c 100
sale4 103 d 50
и база данных выглядит так
code item1 code_item1 amount_item1 item2 code_item2 amount_item2
100 a1 1001 2 a2 1002 1
102 a2 1002 1 a3 1003 1
а затем я хочу добавить в свой первый файл несколько столбцов, которые взяты из базы данных
promo code item stok item1 code_item1 amount_item1 item2 code_item2 amount_item2
sale1 100 a 200 a1 1001 400 a2 1002 200
sale2 101 b 300
sale3 102 c 100 a2 1002 100 a3 1003 100
sale4 103 d 50
Как мне это сделать?
Вы можете использовать left_join()
из dplyr
:
library(dplyr)
my_df <- data.frame(promo = c("sale1", "sale2", "sale3", "sale4"), code = c(100, 101, 102, 103), item = c("a", "b", "c", "d"), stok = c(200, 300, 100, 50))
db_df <- data.frame(code = c(100, 102), item1 = c("a1", "a2"), code_item1 = c(1001, 1002), amount_item1 = c(2,1), item2 = c("a2", "a3"), code_item2 = c(1002, 1003), amount_item2 = c(1,1))
result_df <- left_join(my_df, db_df, by = c("code" = "code"))
result_df
promo code item stok item1 code_item1 amount_item1 item2 code_item2 amount_item2
1 sale1 100 a 200 a1 1001 2 a2 1002 1
2 sale2 101 b 300 <NA> NA NA <NA> NA NA
3 sale3 102 c 100 a2 1002 1 a3 1003 1
4 sale4 103 d 50 <NA> NA NA <NA> NA NA
>
Обновлено: Что касается вашего комментария, вы также можете выполнить умножение после left_join, нет необходимости делать это раньше:
result_df$amount_item1 <- result_df$amount_item1 * result_df$stok
result_df$amount_item2 <- result_df$amount_item2 * result_df$stok
Да, dplyr
хороший вариант, но я в таких случаях всегда использую merge()
.
my_df <- data.frame(promo = c("sale1", "sale2", "sale3", "sale4"), code = c(100, 101, 102, 103), item = c("a", "b", "c", "d"), stok = c(200, 300, 100, 50))
db_df <- data.frame(code = c(100, 102), item1 = c("a1", "a2"), code_item1 = c(1001, 1002), amount_item1 = c(2,1), item2 = c("a2", "a3"), code_item2 = c(1002, 1003), amount_item2 = c(1,1))
result <- merge(x=my_df, y=db_df, by='code', all.x = TRUE)
> result
code promo item stok item1 code_item1 amount_item1 item2 code_item2 amount_item2
1 100 sale1 a 200 a1 1001 2 a2 1002 1
2 101 sale2 b 300 <NA> NA NA <NA> NA NA
3 102 sale3 c 100 a2 1002 1 a3 1003 1
4 103 sale4 d 50 <NA> NA NA <NA> NA NA
спасибо @Adamm за ваш ответ. Я забыл сделать некоторые обновления по моему вопросу вчера. Я хотел бы автоматически умножить каждое «количество товара» на «stok», прежде чем он заполнит новую объединенную таблицу. Что нужно изменить в скрипте? Большое спасибо.
Не могли бы вы изменить вопрос с желаемым результатом?
спасибо @sven за ваш ответ. Я забыл сделать некоторые обновления по моему вопросу вчера. Я хотел бы автоматически умножить каждое «количество товара» на «stok», прежде чем он заполнит новую объединенную таблицу. Что нужно изменить в скрипте? Большое спасибо.