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