簡體   English   中英

檢測具有多個條件的字符串並改變 r 中的列

[英]Detect string with multiple conditions and mutate column in r

我有 Lookup_DF,其中包含用於引用字符串的字典和具有字符串組合的 Raw_file,Lookup_DF 具有基於原始文件中的項目在結果數據框中填充的類型。

Item1=c("Banana","Toamto","Potato","Palak")
Item2=c("","Orange","Onion","Mango")
Type1=c("Fruit","Vegetable","Vegetable","Leaves")
Type2=c("","Fruit","Vegetable","Fruit")

DF1=data.frame(Item1,Item2,Type1,Type2)

Items=c("Onion,Potato,Ginger","Tomato","Banana","Palak,Mango","Onion,Capsicum","Orange,Sweet_potato")

Raw_file=data.frame(Items)

Result_Type1=c("Vegetable","Vegetable","Fruit","Leaves","","")
Result_Type2=c("Vegetable","","","Fruit","Vegetable","Fruit")
Result=data.frame(Items,Result_Type1,Result_Type2)

我的輸出數據框看起來像結果。 我在 case 語句中嘗試了 str_detect 的一些東西,但無法得到它。 有人可以幫我解決這個問題。

也許您可以在這兩個表之間進行連接(類似於您的其他問題)。

首先將DF1放在長格式中。 對於Raw_file ,使用separate_rows有一個項目每一行前加入。

library(tidyverse)

DF1_long <- DF1 %>%
  pivot_longer(cols = everything(), 
               names_to = c(".value", "number"), 
               names_pattern = "(\\w+)(\\d+)$")

Raw_file %>%
  mutate(value = Items) %>%
  separate_rows(value) %>%
  inner_join(DF1_long, by = c("value" = "Item")) %>%
  group_by(Items) %>%
  distinct(Items, number, .keep_all = TRUE) %>%
  pivot_wider(id_cols = Items, 
              names_from = number, 
              values_from = Type, 
              names_prefix = "Result_Type")

輸出

  Items               Result_Type2 Result_Type1
  <chr>               <chr>        <chr>       
1 Onion,Potato,Ginger Vegetable    Vegetable   
2 Tomato              NA           Vegetable   
3 Banana              NA           Fruit       
4 Palak,Mango         Fruit        Leaves      
5 Onion,Capsicum      Vegetable    NA          
6 Orange,Sweet_potato Fruit        NA    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM