簡體   English   中英

確定字符串向量中存在的所有字符

[英]Determine all characters present in a vector of strings

假設我有以下數據幀,由兩個包含字符串的向量組成:

df <- data.frame(
      "ID"= c("1a", "1b", "1c", "1d"), 
      "Codes" = c("BX.MX|GX.WX", "MX.RX|BX.YX", "MX.OX|GX.GX", "MX.OX|YX.OX"),
      stringsAsFactors = FALSE)

我想要一種簡單的方法來確定給定向量中使用了哪些字符。 換句話說,這樣一個函數的輸出將揭示:

find.characters(df$Codes) # hypothetical function
[1] "B" "G" "M" "W" "X" "R" "Y" "O" "|" "."

find.characters(df$ID) # hypothetical function
[1] "1" "a" "b" "c" "d"

您可以創建自定義函數來執行此操作。 這個想法是將字符串拆分為單個字符( strsplit(v1, '') ),輸出將為list 我們可以unlist它以使其成為vector ,然后獲取unique元素。 但是,這還沒有排序。 根據顯示的示例,您可能希望sort字母和其他字符進行不同的sort 因此,我們使用grep來索引 'LETTER' 字符,並使用它來分別sort向量子集進行sort並將c(它連接在一起。

 find.characters <- function(v1){
  x1 <- unique(unlist(strsplit(v1, '')))
  indx <- grepl('[A-Z]', x1)
  c(sort(x1[indx]), sort(x1[!indx]))
 }

 find.characters(df$Codes)
 #[1] "B" "G" "M" "O" "R" "W" "X" "Y" "|" "."

 find.characters(df$ID)
 #[1] "1" "a" "b" "c" "d"

注意:通常,我會使用grepl('[A-Za-z]', x1) ,但我沒有這樣做,因為 'ID' 列的預期結果不同。

find.characters<-function(x){
  unique(c(strsplit(split="",x),recursive = T))
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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