2016-06-13 101 views
3

我有一個大的數據數千列的設置後刪除列名的部分。列名包括各種不需要的字符如下:[R某些字符

col1_3x_xxx 
col2_3y_xyz 
col3_3z_zyx 

我想刪除開始與所有列名「_3」的所有字符串被留下乾淨的:

col1 
col2 
col3 

什麼最有效的方法來做5000+列?

+1

'名(your_data)= GSUB(模式= 「_3 *」,更換= 「」,X =名稱(your_data))' – Gregor

+0

另外,請不要」除非您的問題涉及RStudio,否則請使用RStudio標籤。 (只是因爲你用Word寫的東西你不會使用一個Microsoft Word標籤的語法問題。) – Gregor

+0

你也可以使用:'sapply(strsplit(名稱(DF),「_3」),\'[ [\',1)'。 – JasonWang

回答

1

我們可以使用sub

sub("_3.*", "", df1[,1]) 
#[1] "col1" "col2" "col3" 
1

我們可以用正則表達式模式"^[^_]+(?=_)"嘗試str_extract

stringr::str_extract(c("col1_3x_xxx", "col2_3y_xyz", "col3_3z_zyx"), "^[^_]+(?=_)") 
[1] "col1" "col2" "col3" 

其中一個模式:

第一^字符串的開頭匹配; [^_]+匹配一個 或多個非_字符,^_指任何字符,但_(?=...) 代表超前,因此我們正在尋找_之前的模式。

+1

不需要非捕獲組:'str_extract(cols,「^ [^ _] +」)'。與Gregor的建議非常相似:'sub(pattern =「_3。*」,replacement =「」,x = cols,perl = TRUE)' – Jota