Как создать новый столбец на основе имени объекта, указанного в столбце, и кода при необходимости - PullRequest
1 голос
/ 20 апреля 2020

У меня есть данные ниже в Excel. который я импортировал.

Item_code   Price   Raw_Material

 1. 10001jk10002    20  Made with Apple
 2. 10001jk10002    20  Made with Grapes
 3. 10001jk10002    30  Made with Banana
 4. 10011jk10022    60  Made with Grapes
 5. 10011jk10022    60  Made with Grapes

Результат, который я ищу с новым столбцом

Item_code   Price   Raw_Material          Fruit Used    

 1. 10001jk10002    20  Made with Apple     Apple
 2. 10001jk10002    20  Made with Grapes    Grapes
 3. 10001jk10002    30  Made with Banana    Banana
 4. 10011jk10022    60  Made with Grapes    Grapes
 5. 10011jk10022    60  Made with Grapes    Grapes

Из нового столбца я хочу вывести еще один новый столбец 'Final Fruite'

Item_code   Price   Raw_Material        Fruit Used  Final Fruit

 1. 10001jk10002    20  Made with Apple     Apple       Banana 
 2. 10001jk10002    20  Made with Grapes    Grapes      Banana 
 3. 10001jk10002    30  Made with Banana    Banana      Banana   
 4. 10011jk10022    60  Made with Grapes    Grapes      Grapes 
 5. 10011jk10022    60  Made with Grapes    Grapes      Grapes

Если вы видите, мои первые 3 строки одинаковы. Сначала я хочу использовать колонку Fruit на основе столбцов Raw_material. В предложении используются названия фруктов (которые могут быть случайными), а затем я хочу извлечь еще один столбец из столбца фруктов Final_Fruite независимо от того, какой фрукт будет в следующих строках, я хочу вернуть банан в моем новом столбце

Фактический список предпочтительных фруктов идет до 10. Я ищу динамическое решение c. Кто-нибудь может подсказать, как я могу сделать то же самое, чтобы получить желаемый результат.

Ответы [ 2 ]

1 голос
/ 20 апреля 2020
library(readxl)
library(dplyr)
library(magrittr)
library(stringr)

fruity <- read_excel("fruity.xlsx")
fruity <- fruity %>% 
  group_by(item_code) %>% 
  mutate(id = row_number()) %>% 
  mutate(fruit_used  = word(raw_material, -1)) 

tmp <- fruity %>%  group_by(item_code) %>% top_n(1, id) %>% 
  select(item_code, fruit_used) %>% 
  set_colnames(c('item_code','final_fruit'))

fruity <- fruity %>% left_join(tmp, by = 'item_code') %>% select(-"id")
1 голос
/ 20 апреля 2020

Мы можем извлечь последнее слово с помощью

library(stringi)
df1$Fruite_used <- stri_extract_last(df1$Raw_Material, regex = "\\w+")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...