我有一個大的數據數千列的設置後刪除列名的部分。列名包括各種不需要的字符如下:[R某些字符
col1_3x_xxx
col2_3y_xyz
col3_3z_zyx
我想刪除開始與所有列名「_3」的所有字符串被留下乾淨的:
col1
col2
col3
什麼最有效的方法來做5000+列?
我有一個大的數據數千列的設置後刪除列名的部分。列名包括各種不需要的字符如下:[R某些字符
col1_3x_xxx
col2_3y_xyz
col3_3z_zyx
我想刪除開始與所有列名「_3」的所有字符串被留下乾淨的:
col1
col2
col3
什麼最有效的方法來做5000+列?
我們可以使用sub
sub("_3.*", "", df1[,1])
#[1] "col1" "col2" "col3"
我們可以用正則表達式模式"^[^_]+(?=_)"
嘗試str_extract
:
stringr::str_extract(c("col1_3x_xxx", "col2_3y_xyz", "col3_3z_zyx"), "^[^_]+(?=_)")
[1] "col1" "col2" "col3"
其中一個模式:
第一
^
字符串的開頭匹配;[^_]+
匹配一個 或多個非_
字符,^_
指任何字符,但_
。(?=...)
代表超前,因此我們正在尋找_
之前的模式。
不需要非捕獲組:'str_extract(cols,「^ [^ _] +」)'。與Gregor的建議非常相似:'sub(pattern =「_3。*」,replacement =「」,x = cols,perl = TRUE)' – Jota
'名(your_data)= GSUB(模式= 「_3 *」,更換= 「」,X =名稱(your_data))' – Gregor
另外,請不要」除非您的問題涉及RStudio,否則請使用RStudio標籤。 (只是因爲你用Word寫的東西你不會使用一個Microsoft Word標籤的語法問題。) – Gregor
你也可以使用:'sapply(strsplit(名稱(DF),「_3」),\'[ [\',1)'。 – JasonWang