आर में, मैं यह कोशिश कर रहा हूँ:
- "Item_List" तालिका के साथ, "विवरण" कॉलम खोजें जिसमें है: 1a। शब्द "बीटीई", और 2 बी। शब्द "आरआईसी" या "आरआईटीसी" या दोनों
- मुझे इन पंक्तियों की अनुक्रमणिका (पंक्ति संख्या) चाहिए।
- एक नया कॉलम "समीक्षा 1" बनाएं, ऊपर चरण 2 द्वारा पहचानी गई पंक्तियों में "हां" दर्ज करें।
यहाँ मेरी डेटा फ़ाइल है:
https://drive.google.com/file/d/1uUlCf9LaU97HcHc1ehbbJ9yLjSn94n29/view?usp=sharing
library(readxl)
library(stringr)
मेरे पास यह बेकार कोड है (वे काम करते हैं):
match1 <- which(str_detect(Item_List$Description, "BTE"))
match2 <- which(str_detect(Item_List$Description, "(RITC)|(RIC)"))
match_result <- intersect(match1, match2)
Item_List$Review1 <- ""
Item_List$Review1[match_result] <- "Yes"
लेकिन मेरे प्रश्न हैं:
ए। क्या उपरोक्त "मैच 1" और "मैच 2" के बजाय रेगेक्स कोड की एक पंक्ति में हो सकता है?
B. पाइप नीचे काम क्यों नहीं करता है?
Item_List %>%
which(str_detect(pattern = "BTE"))
0
Steve
7 फरवरी 2021, 08:08
2 जवाब
सबसे बढ़िया उत्तर
आप match1
और match2
को एक पंक्ति में इस प्रकार जोड़ सकते हैं:
library(dplyr)
library(stringr)
Item_List %>%
mutate(Review1 = if_else(str_detect(Description,'BTE.*(RITC|RIC)|(RITC|RIC).*BTE'),
'Yes', ''))
# Product `Product Code` Manufacturer Description Review1
# <chr> <chr> <chr> <chr> <chr>
# 1 Hearing Aid 11516117 WIDEX BEYOND 220 FUSION BTE RITC Digital "Yes"
# 2 Hearing Aid 11516116 WIDEX BEYOND 330 FUSION BTE RITC Digital "Yes"
# 3 Hearing Aid 11516114 WIDEX BEYOND 440 FUSION BTE RITC Digital "Yes"
# 4 Hearing Aid 11522324 WIDEX EVOKE 110 BTE 13 D BTE Standard Digital ""
# 5 Hearing Aid 11912651 WIDEX EVOKE 110 CIC CIC Digital ""
# 6 Hearing Aid 11912682 WIDEX EVOKE 110 E-IM HS Half Shell Digital ""
# 7 Hearing Aid 11912678 WIDEX EVOKE 110 E-IM ITC Canal Digital ""
# 8 Hearing Aid 11912650 WIDEX EVOKE 110 E-IM ITE Full Shell Digital ""
# 9 Hearing Aid 11912674 WIDEX EVOKE 110 E-IP HS Half Shell Digital ""
#10 Hearing Aid 11912670 WIDEX EVOKE 110 E-IP ITC Canal Digital ""
# … with 186 more rows
जिसे आधार R में इस प्रकार लिखा जा सकता है:
transform(Item_List, Review1 = ifelse(grepl('BTE.*(RITC|RIC)|(RITC|RIC).*BTE',
Description), 'Yes', ''))
दूसरे प्रश्न के लिए,
Item_List %>% which(str_detect(pattern = "BTE"))
यह काम नहीं करता है क्योंकि आप एक डेटाफ़्रेम (Item_List
) से which
पास कर रहे हैं। तुम यह कर सकते थे :
Item_List %>%
pull(Description) %>%
str_detect(pattern = "BTE") %>%
which()
1
Ronak Shah
7 फरवरी 2021, 09:07
हाँ, यह सब grepl()
फ़ंक्शन के साथ एक चरण में किया जा सकता है।
Item_List$Review1 <- grepl("(?=.*BTE)(?=.*RIC|.*RITC)", Item_List$Description, perl = TRUE)
1
David J. Bosak
7 फरवरी 2021, 08:36