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