簡體   English   中英

將列名稱替換為R中部分匹配的字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM