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