我有數據的在具有值,例如一個R數據幀的列:分裂在R數據幀的列
Blue-#105
Green-#8845
Yellow-#5454
Blue-#999
我想刪除的最後一個數字部分(在開始 - #),以便繪圖時,Blue-#999
和Blue-#105
被認爲是同樣的東西。我怎麼能做到這一點?
我有數據的在具有值,例如一個R數據幀的列:分裂在R數據幀的列
Blue-#105
Green-#8845
Yellow-#5454
Blue-#999
我想刪除的最後一個數字部分(在開始 - #),以便繪圖時,Blue-#999
和Blue-#105
被認爲是同樣的東西。我怎麼能做到這一點?
使用正則表達式:
> DF <- data.frame(col=c("Blue-#105", "Green-#8845", "Blue-#999"))
> DF
col
1 Blue-#105
2 Green-#8845
3 Blue-#999
> DF$col <- gsub("-\\#.*", "", DF$col)
> DF
col
1 Blue
2 Green
3 Blue
>
在這裏,我們說,開始-#
所有字符串(其中進行轉義評論焦炭#
需要),並隨後任何 ---這是.*
在正則表達式術語:任何字符(點)重複多次,因爲它適合(明星)---將被替換爲空字符串,換句話說,刪除。
使用sub或gsub函數。對於你的例子,你可以做這樣的事情:
newcolors <- sub("^([^-]*)-.*$", "\\1", oldcolors)
這假設顏色是在一個向量'oldcolors',並把結果放入新的顏色。模式從字符串(^)的開始處開始,然後匹配0或更多不是破折號的字符([^ - ] ),這些字母表示保存匹配的內容。然後它匹配一個短劃線,後跟更多的字符(。),直到字符串($)結束爲止,匹配的部分(整個字符串)將被替換爲parens(顏色)內匹配的任何字符。
嗨格雷格,我喜歡你的答案是多麼的簡潔,但是我得到了一個錯誤:在'newdatafr < - gsub(「^([^ - ] *) - 。* $」),'newdatafr是等價的到你的例子中的新顏色。 – 2010-09-27 16:02:51
@Eric:那麼我認爲你應該複製粘貼更好。它適用於我,並且您提供的錯誤不會顯示與Greg在此處發佈的代碼相同的代碼。 – 2010-09-27 16:15:54
FWIW我的'gsub()'調用比此處顯示的'sub()'調用更短/更簡潔。否則,它們當然基本上是等價的。 – 2010-09-27 18:16:02
你migth檢查這個問題http://stackoverflow.com/questions/3703803/apply-strsplit-rowwise/和我的答案與類似的問題,像你的鏈接。 – Marek 2010-09-28 06:09:30