Python與R的異同(二):字符串操作

字符串操作的差異

R本身設(shè)計(jì)初衷主要是用來(lái)處理矩陣運(yùn)算這類數(shù)學(xué)問(wèn)題,因此在字符串操作方面比較薄弱进鸠。Python并不是專門用來(lái)進(jìn)行數(shù)學(xué)計(jì)算的形病,沒(méi)有偏向性,字符串操作優(yōu)良量瓜。但是多年前聽(tīng)說(shuō)還是比不上Perl途乃,不知道現(xiàn)在怎么樣了耍共。

構(gòu)建字符串

R的字符串無(wú)論數(shù)量多少都是存放在向量數(shù)據(jù)結(jié)構(gòu)中,復(fù)雜一點(diǎn)的存放就是array, matrix, data.frame, list杠纵;Python有專門的字符串類型數(shù)據(jù)結(jié)構(gòu)钩骇,如果需要存放多個(gè)字符串倘屹,則可以用序列類型,如list(列表), dict(字典), tuple(元組)唐瀑,set(集合)哄辣。

下面是手動(dòng)創(chuàng)建字符串的一些操作,基本上R就比Python少了一個(gè)'''操作而已毅弧,這個(gè)在Python里是用于賦值多行字符串的当窗。R連多行注釋都沒(méi)有,這個(gè)也能理解吧

# R
s <- 'abc' 元咙; s <- "abc";  s<- "s'b" ; s <- 's\'b'
ss <- c('abc','efg')
ss_matrix <- matrix(c('ab','bc','cd','de'),nrow=2)
ss_list <- list('a','b','c','d')
# Python
ss = 'abc' ; ss = "abc" ; ss = "What's your name"; ss = 'What\'s your name' ; ss ='''What's your name庶香; "sb?" '''
ss_list = ['abc','edf']
ss_dict= {'a':'b', 'c':'d'}
ss_tuple = ('a','b')

如果是從文本里面讀取數(shù)據(jù)的話,Python是先用open定義一個(gè)文件對(duì)象,由于文件對(duì)象是可迭代的感猛,所以最后可以保存成序列類型的數(shù)據(jù)結(jié)構(gòu)奢赂,如列表

[line for line open('file.txt', 'r')]
with open('file.txt', 'r') as f:
    strings = f.readlines()

R原本是用來(lái)進(jìn)行數(shù)據(jù)分析的膳灶,所以用的是read.table類函數(shù)讀取多列存放的數(shù)據(jù),成為后續(xù)操作會(huì)用到的data.frame對(duì)象司致。當(dāng)然對(duì)于普通的文本文件聋迎,與Python的open和readlines對(duì)應(yīng)的是filereadLines霉晕,注意這里的Lines,打錯(cuò)就是其他函數(shù)了拄轻。

# 類似open
fileA <- file("text.txt", "r")
# 類似python的readline和readlines
# 可以指定固定行, readline(fileA, n=1), 默認(rèn)全部讀取
text <- readLines(fileA)
length(text)

這里的text的每一個(gè)元素對(duì)應(yīng)為text.txt的行數(shù)據(jù)伟葫。
可以練習(xí)一下讀取fasta文件,并保存為R的list格式斧抱。

函數(shù)

R語(yǔ)言本身的目的不是做文本處理的渐溶,基礎(chǔ)功能比較薄弱是可以理解的茎辐〉嗨。基礎(chǔ)函數(shù)大致是如下幾個(gè):
nchar(): 函數(shù)返回字符串長(zhǎng)度
paste(), paste0(): 連接若干個(gè)字符串
sprintf():格式化輸出
toupper(): 大寫轉(zhuǎn)換
tolower(): 小寫轉(zhuǎn)換
substr(): 提取或替換一個(gè)字符串向量的子串
正則表達(dá)式相關(guān)的函數(shù)懊亡,如grep, grepl, regexpr, gregexpr, sub, gsub, strsplit.

后來(lái)Hadley大神看不下去丐黄,寫了一個(gè)stringr用來(lái)強(qiáng)化R語(yǔ)言字符串操作孔飒,效果拔群坏瞄。
stringr函數(shù)主要分為四類:

  1. 字符操作:操作字符向量中的單個(gè)字符 str_length, str_sub, str_dup
  2. 添加桂对,移除和操作空白符 str_pad, str_trim, str_wrap
  3. 大小寫轉(zhuǎn)換處理 str_to_lower, str_to_upper, str_to_title
  4. 模式匹配函數(shù) str_detect, str_subset, str_count, str_locate, str_locate_all, str_match, str_match_all, str_replace, str_replace_all, str_split_fix, str_split, str_extract, str_extract_all

Python中字符串?dāng)?shù)據(jù)結(jié)構(gòu)本身就有許多的方法,而且還有一些包提供其他功能鸠匀,比如說(shuō)re提供了正則表達(dá)式功能蕉斜,string擴(kuò)展了更多功能。
用dir看下有哪些字符串類型函數(shù)

dir(str)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

對(duì)于一個(gè)的字符單位的操作而言缀棍,R和Python基本上都有一一對(duì)應(yīng)的函數(shù)宅此,比如說(shuō)R的str_to lower(), str_to_upper(), str_to_title()對(duì)應(yīng)就是python的lower(), upper(), title(),R的模式匹配函數(shù)對(duì)應(yīng)的是Python的re模塊。
然對(duì)于多個(gè)字符串組成的整體而言爬范,需要記住R是向量化操作父腕,相對(duì)應(yīng)的是Python必須要用列表推導(dǎo)式,舉個(gè)例子就是

# R
library(stringr)
ss <- c('abc', 'efg')
str_to_upper(ss)
# Python
ss = ['abc', 'efg']
[string.upper() for string in ss]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末青瀑,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子斥难,更是在濱河造成了極大的恐慌枝嘶,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哑诊,死亡現(xiàn)場(chǎng)離奇詭異群扶,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)镀裤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門竞阐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人淹禾,你說(shuō)我怎么就攤上這事馁菜。” “怎么了铃岔?”我有些...
    開(kāi)封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵汪疮,是天一觀的道長(zhǎng)峭火。 經(jīng)常有香客問(wèn)我,道長(zhǎng)智嚷,這世上最難降的妖魔是什么卖丸? 我笑而不...
    開(kāi)封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮盏道,結(jié)果婚禮上稍浆,老公的妹妹穿的比我還像新娘。我一直安慰自己猜嘱,他們只是感情好衅枫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著朗伶,像睡著了一般弦撩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上论皆,一...
    開(kāi)封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天益楼,我揣著相機(jī)與錄音,去河邊找鬼点晴。 笑死感凤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的粒督。 我是一名探鬼主播陪竿,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼坠陈!你這毒婦竟也來(lái)了萨惑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤仇矾,失蹤者是張志新(化名)和其女友劉穎庸蔼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贮匕,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姐仅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刻盐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掏膏。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖敦锌,靈堂內(nèi)的尸體忽然破棺而出馒疹,到底是詐尸還是另有隱情,我是刑警寧澤乙墙,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布颖变,位于F島的核電站生均,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏腥刹。R本人自食惡果不足惜马胧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衔峰。 院中可真熱鬧佩脊,春花似錦、人聲如沸垫卤。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)葫男。三九已至抱冷,卻和暖如春崔列,著一層夾襖步出監(jiān)牢的瞬間梢褐,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工赵讯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留盈咳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓边翼,卻偏偏與公主長(zhǎng)得像鱼响,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子组底,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 在挖掘分析的過(guò)程當(dāng)中對(duì)字符串的處理是極為重要的丈积,且出現(xiàn)也較為頻繁,R語(yǔ)言作為當(dāng)前最為流行的開(kāi)源數(shù)據(jù)分析和可視化平臺(tái)...
    果果哥哥BBQ閱讀 5,813評(píng)論 0 8
  • R語(yǔ)言主要擅長(zhǎng)于數(shù)值向量和矩陣操作债鸡,但是讓他去做字符串操作也可以江滨。 字符串的基本操作類型: 查找和替換 大小寫轉(zhuǎn)換...
    xuzhougeng閱讀 5,922評(píng)論 1 7
  • 外面的雨淅淅瀝瀝,不適合出門厌均,最適合遐思和想念唬滑。媽媽才打個(gè)電話說(shuō)衡陽(yáng)大雨傾盆,并問(wèn)我昨天去博物館好不好玩棺弊。我才忘記...
    嬛姝閱讀 344評(píng)論 0 1
  • ????每次修改系統(tǒng)環(huán)境變量以后需要重啟explorer.exe進(jìn)程晶密,使之生效,但是在安裝python的時(shí)候模她,發(fā)現(xiàn)...
    laravel閱讀 781評(píng)論 0 0
  • 一归苍、 下面的代碼輸出多少?修改代碼讓fnArri 輸出 i运怖。使用兩種以上的方法 方法1 方法2 方法3 二拼弃、 封裝...
    崔敏嫣閱讀 294評(píng)論 0 0