str转list_数据运算030篇字符串处理str_dec的局限
原始的數據
??為了演示這個過程,我這里生成了一個虛擬的數據,結構如下:
library(stringr)dat1c(dat2c(> dat1 x y1 1號發展有限公司 12 2號發展有限公司 23 3號科學有限公司 34 4號科學有限公司 45 5號牛逼哄哄有限公司 5> dat2 x y1 科學發展(中國)有限公司 12 科學發展(中國)有限公司 23 科學發展中國有限公司 34 天道發展有限公司 45 牛逼哄哄有限公司 5注意一下原始數據中帶括號的區別,其中在dat2中,第一行的是英文括號,第二行的是中文括號。相信因為這個括號的問題,大家編程時都不小心入過坑。
想實現的操作
? ? 用stringr包中的str_dec,一開始的初衷就是對于列中的公司名進行搜索,以找到自己定義了關鍵字的行。要實現2個任務
找出指定關鍵字,“科學”及“發展”兩個字的公司
找出有關鍵字“科學發展(中國)”的公司 ,注意是英文的括號;或者是找出有關鍵字“科學發展(中國)”的公司 ,注意是中文的括號
任務1
? ?這個任務很簡單,一個就是用或的符號,在str_dec中指定即可:
str_detect(dat1$x,"發展|科學")%>%dat1[.,]但是在日常的工作中,可能這兩個關鍵字,發展與科學,是會變的,假如是變量,如下:
var1"1號"var2"牛逼"paste0(var1,"|",var2)%>%str_detect(dat1$x,.)%>%dat1[.,]所以,也只要指定paste0連接即可。
任務2
? ?來看看,帶括號的操作,dat2中的數據。當然了,有人說,我可以把數據源dat2中的特殊字符都處理掉,不行么?行,你說了算。不過,有時候,處理掉了這些特殊字符,后面就失去了它原來的意義。我就是這么執拗,要帶括號操作,怎么辦?
> dat2 x y1 科學發展(中國)有限公司 12 科學發展(中國)有限公司 23 科學發展中國有限公司 34 天道發展有限公司 45 牛逼哄哄有限公司 5> str_detect(dat2$x,"科學發展(中國)|牛逼哄哄")%>%dat2[.,] x y3 科學發展中國有限公司 35 牛逼哄哄有限公司 5?what a fuck? 這個不是我們要的1與5,而是出現了3與5,無視我的括號嘛 ?如果用的是中文的括號,如下:
> str_detect(dat2$x,"科學發展(中國)|牛逼哄哄")%>%dat2[.,] x y2 科學發展(中國)有限公司 25 牛逼哄哄有限公司 5如果中文的括號,一點沒問題。果然是搞區別對待,英文的當作了特殊字符,要下面加個\\轉一下:
> str_detect(dat2$x,"科學發展\\(中國\\)|牛逼哄哄")%>%dat2[.,] x y1 科學發展(中國)有限公司 15 牛逼哄哄有限公司 5所以,括號要特別的注意。這個時候,就發現了str_dec的一個局限,來看看grep對應的操作。假設我們只想找出有關鍵字“科學發展(中國)”的公司:
> grepl("科學發展(中國)",dat2$x,fixed=TRUE)%>%dat2[.,] x y1 科學發展(中國)有限公司 1> grepl("科學發展(中國)",dat2$x)%>%dat2[.,] x y3 科學發展中國有限公司 3>可以看到,在grepl中有一個fixed參數的開關,如果為TRUE,前面所有的字符串的特殊字符,就當正常的操作,這樣就OK了。可是在str_dec中,沒有這個對應的參數。
不確定字符串的情況
? ?其實重點是在這個任務如何處理,如果知道了明確的字符串,任務1與2都很簡單,那么,當字符串是兩個變量,并且有特殊符號時,該怎么辦呢?憑我的智商,只能用下面的曲線救國的方法:
var1"科學發展(中國)"var2"天道"patlist(var1),#把兩個要檢查的字符存入列表,方便?后面的mapplydatlist(dat2$x),length(pat))#復制對應的列表個數,方便mapplystrcheckfunction(dat,str){???grepl(str,dat,fixed?=?TRUE)??}#這是一個用了grepl的,并且是fixed=TRUE的檢查函數mapply(strcheck,dat,pat)%>%apply(.,1,any)%>%dat2[.,]#用mapply操作,返回的值用any來計算,只要對上了,都 為TRUE當上面的var1與var2變成任何值時,哪怕有字符串,上面的也是可以對付 。
?今天的簡單分享就到這里,希望朋友們有用;上面只是舉例,事實的情況,數據是相當大的。所以希望用簡單的例子,來應對復雜的情況。
當然了,相信有更簡單的實現方法,希望朋友們留言。
參考文獻?
1.??https://www.rdocumentation.org/packages/stringr/versions/1.4.0/topics/str_detect
往期回顧:
01
基本概念
從零開始學R-001篇-程序安裝
從零開始學R-002篇-向量
從零開始學R-003篇-數據框
從零開始學R-004篇-列表
從零開始學R-005篇-矩陣
數據結構-006篇-數組實例
數據結構-007篇-因子
?數據運算-008篇-數學與邏輯運算
數據運算-009篇-矩陣運算簡單介紹
數據運算-010篇-內置的一般數學計算函數
數據運算-011篇-內置的統計概率函數
數據運算-012篇-集合的操作
邏輯運算-013篇-條件語句
循環語句-014篇-for與while
循環語句-015篇-apply家族
定位函數-016篇-which函數打天下
字符處理-017篇-paste函數
字符處理-018篇-grep,substr,sub等函數
數據運算-019篇-統計函數初體驗median與mad
數據運算-020篇-統計函數初體驗之分位數quantile
數據運算-021篇-統計函數初體驗之差分diff函數
數據運算-022篇-統計函數初體驗之中心化函數scale
數據運算-023篇-描述性統計分析及缺失值分析
數據運算-024篇-相關系數分析
數據運算-025篇-dplyr之slice
數據運算-026篇-數據的行拆分
數據運算-027篇-數據的行合并
數據運算-028篇-rlang的列引用方法
數據運算-029篇-對多列數據框進行格式轉換
02
基礎作圖
R的作圖-001篇-barplot柱狀圖
R的作圖-002篇-pie?作餅圖
R的作圖-003篇-hist?直方圖
R的作圖-004篇-boxplot箱線圖
R的作圖-005篇-核密度圖與比較
R的作圖-006篇-plot函數
R的作圖-007篇-散點圖與線性擬合
R的作圖-008篇-散點圖矩陣
R的作圖-009篇-高密度散點圖
R的作圖-010篇-三維散點圖
R的作圖-011篇-氣泡圖
R的作圖-012篇-馬賽克圖
R的作圖-013篇-QQ圖及原理
R的作圖-014篇-lm擬合結果圖解釋
R的作圖-015篇-ggplot2之初體驗
R的作圖-016篇-ggplot2之geom_point
R的作圖-017篇-ggplot2之geom_jitter與rug
R的作圖-018篇-ggplot2之geom_line與geom_path
R的作圖-019篇-ggplot2之geom_area,geom_polygon geom_ribbon
R的作圖-020篇-ggplot2之geom_bar,geom_col與geom_histogram????
R的作圖-021篇-ggplot2之geom_density
R的作圖-022篇-ggplot2之geom_density2d
R的作圖-023篇-ggplot2之geom_boxplot
R的作圖-024篇-ggplot2之geom_bin2d
R的作圖-025篇-ggplot2之geom_contour()
R的作圖-026篇-ggplot2之geom_crossbar 與geom_count()
R的作圖-027篇-ggplot2之geom_errorbar 與geom_linerange等簡單作圖
R的作圖-028篇-ggplot2之geom_vline/hline/abline/smooth等
R的作圖-029篇-ggplot2之geom_tile,geom_rect與geom_raster
R的作圖-030篇-ggplot2之geom_text與geom_label
作圖進階-031篇-ggplot2之geom_violin
作圖進階-032篇-ggplot2之分面facet_grid與facet_wrap
作圖進階-033篇-ggplot2之legend
作圖進階-034篇-ggplot2之作圖區的設定
作圖進階-035篇-ggalluvial之桑基圖
作圖進階-036篇-ggridges之峰巒圖
作圖進階-037篇-坐標軸標簽重疊的優化
作圖進階-038篇-數據擬合作圖分析
作圖進階-039篇-plotly包之add_XXX
作圖進階-040篇-plotly的type與mode
作圖進階-041篇-plotly的顏色設置
作圖進階-042篇-plotly中往圖中增加標簽
作圖進階-043篇-plotly通過add_fun靈活疊加圖
作圖進階-044篇-plotly的圖例legend設置
作圖進階-045篇-plotly的坐標軸Ticks設置
作圖進階-046篇-plotly設定默認的trace顏色
作圖進階-047篇-plotly中畫誤差棒作圖進階-048篇-plotly中的箱線圖
作圖進階-049篇-plotly中的動畫效果
作圖進階-050篇-plotly中二維密度與等高線
作圖進階-051篇-add_heatmap的使用
作圖進階-052篇-add_ribbons與polygons的使用
作圖進階-053篇-add_segments,add_paths與add_table
作圖進階-054篇-基于矩陣畫熱圖
作圖進階-055篇-mesh3d畫個雨傘玩玩
作圖進階-056篇-經驗累積分布函數的實現
作圖進階-057篇-畫個瓶子玩玩
?作圖進階-058篇-plotly中的曲線旋轉
作圖進階-059篇-曲線旋轉后簡單構造三維圖形作圖進階-060篇-曲線的拉伸作圖進階-061篇-ggplot2中的legend排列作圖進階-062篇-ggplot2中采用雙標度作圖進階-063篇-ggplot2中的標度作圖進階-064篇-plotly里的gauge chart作圖進階-065篇-plotly里的瀑布圖作圖進階-066篇-plotly里的漏斗圖作圖進階-067篇-ggplot2中標注顯著性作圖進階-068篇-ggplot2中的嵌套子圖作圖進階-069篇-r中的數據表格處理作圖進階-070篇-再談R中的顏色作圖進階-071篇-再談R中的因子作圖進階-072篇-展現交集的韋恩圖作圖進階-073篇-用R快速生成word文檔批03
作圖技巧
作圖技巧-001篇-facet_zoom放大局部圖
作圖技巧-002篇-ggplot2?中的字體設置
作圖技巧-003篇-ggplot2?新版本?3.3.0的一些新功能
作圖技巧-004篇-QQ圖之DIY
作圖技巧-005篇-plotly做3維曲面圖
作圖技巧-006篇-數據標記初體驗
作圖技巧-007篇-數據標記之geom_mark_hull進階
作圖技巧-008篇-ggforce中甜甜圈餅圖的作法及其它的功能
作圖技巧-009篇-ggplot作圖時的因子排序
作圖技巧-010篇-plot_ly中的mesh3d
作圖技巧-011篇-ggplot_build中的數據提取實現histogram與density同步疊加
作圖技巧-012篇-ggplot中的stat_sum等系列
作圖技巧-013篇-ggplot分面圖的標簽設置
作圖技巧-014篇-不同的樣條曲線bspline
作圖技巧-015篇-大家一起來拼圖
作圖技巧-016篇-拼圖系列之2-cowplot
作圖技巧-017篇-拼圖工具之3-patchwork
作圖技巧-018篇-第二坐標軸在ggplot2中的實現
作圖技巧-019篇-draw_key_XXX系列
作圖技巧-020篇-更改ggplot2作圖的默認設置
作圖技巧-021篇-增加基于表達式的坐標軸標題
04
R的技巧
R的技巧-001篇-快速從列表中提取元素組成數據框
R的技巧-002篇-快速對數據框中滿足條件的列進行替換
R的技巧-003篇-數字的不同取整與進位
R的技巧-004篇-文件名提取分類成表
R的技巧-005篇-直方圖與分布圖的疊加
R的技巧-006篇-ggplot2中的cut類函數
R的技巧-007篇-assign與get:動態生成變量與獲取變量
R的技巧-008篇-pretty函數實現完美分割點
R的技巧-009篇-數據填充? ???????????????
R的技巧-010篇-dplyr之slice,mutate,summarize ?與do
R的技巧-011篇-dnorm,pnorm與qnorm傻傻分不清
R的技巧-012篇-縫縫補補改創建好的ggplot2圖
R的技巧-013篇-approx函數插值
R的技巧-014篇-openxls包處理excel數據
?
歡迎關注與轉發,如有不懂,可以共同探討,在后臺留言或者是掃碼下方。你點的每一個在看,我都認真當成了喜歡
總結
以上是生活随笔為你收集整理的str转list_数据运算030篇字符串处理str_dec的局限的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中常用模块_工作中用过的Py
- 下一篇: matlab中find函数_在R中使用M