Как искать значения из кода и создавать новые столбцы на его основе - PullRequest
0 голосов
/ 27 мая 2019

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

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

Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Вы можете использовать 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
0 голосов
/ 27 мая 2019

Да, 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...