R言語で特定の文字列より左側、右側の文字列を返すユーザー関数
HTMLやXML,iCalを処理することがあるのですが、ある文字列より右側の文字列とか左側の文字列を抽出したいことがあります。
splitLeft("SUMMARY:東京オリンピック出場",":") ##SUMMARY splitRight("SUMMARY:東京オリンピック出場",":") ##東京オリンピック出場
こういう感じです。
iCalの場合、各行の初出の : より左側が項目名、右側が内容となっていますので、:で左右に分割する必要があります。
こういうことをするwrapperを作りましたのでよろしければどうぞ。
[R]ユーザー関数 splitLeft(),splitRight()
splitLeft<-function(str,separ){ # str target string 対象文字列 # separ separator 分割する文字列 strsplit(str,separ)[[1]][[1]] } splitRight<-function(str,separ){ # str target string 対象文字列 # separ separator 分割する文字列 pos<-regexpr(separ,str)[1]+nchar(separ) substr( str, pos, nchar( str )) }
splitLeft はもともとセパレーター文字列で分割した1個目の要素を求めるのでstrsplitをwrapしています。
splitRight はセパレータ文字列の次の文字から最後の文字までを抽出しています。
区切り文字は何文字でもかまいません。
These functions divide strings(arg1) by separator(arg2),
and strLeft returns the strings on the left,
strRight returns the strings on the right.
example.
str<-"DTEND;TZID=Asia/Tokyo:20150315T100000"
(strL<-splitLeft(str,":"))
[1]DTEND;TZID=Asia/Tokyo
splitRight(strL,"=")
[1]Asia/Tokyo