[英]Replace column names with the string that partially match in R
我有一個數據mycolumns
,其列名稱為mycolumns
(具有2000多個列)。 我有這個obect叫myobject
包含集,部分與列名(每個只有一個名稱相匹配)的匹配字符串mycolumns
。 我想用對象中的相應字符串替換列名稱。因此,數據"jackal","cat.11","Rat.Fox"
的新列名稱將為"jackal","cat.11","Rat.Fox"
。 請注意,這必須通過使用模式匹配或正則表達式來完成,因為匹配名稱的順序在myobject中可能不同。
mycolumns <- c("jackal.fox11.FAD", "cat.11.miss.DAD", "Rat.Fox.11.33.DDG")
myobject <- c("jackal","Rat.Fox","cat.11")
用grep進行for循環怎么樣:
#your example
mycolumns <- c("jackal.fox11.FAD", "cat.11.miss.DAD", "Rat.Fox.11.33.DDG")
myobject <- c("jackal","Rat.Fox","cat.11")
#for loop solution
for(i in myobject){
mycolumns[grepl(i, mycolumns)] <- i
}
數據設置:
> mycols = qw("jackal.fox11.FAD cat.11.miss.DAD Rat.Fox.11.33.DDG")
> df = read.csv(textConnection("1,2,3"), header=F)
> names(df) = qw("jackal Rat.Fox cat.11")
這生意:
> names(df) = sapply(names(df), function(n) mycols[grepl(n, mycols)])
結果:
> names(df)
[1] "jackal.fox11.FAD" "Rat.Fox.11.33.DDG" "cat.11.miss.DAD"
以@ luke-singham為基礎的道具
在.Rprofile
中定義的qw
,如https://stackoverflow.com/a/31932661/338303
如果可以保證名稱與此處相同,這很簡單。 但是,這種情況微不足道,因此解決方案中似乎沒有任何價值,而僅是names(df) <- myobject
names(df)[c(grep(myobject[1], mycolumns), grep(myobject[2], mycolumns), grep(myobject[3], mycolumns))] <- myobject
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.