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

时间:2015-08-05 07:39:56

标签: r string grep character

假设我有以下数据框,其中包含两个包含字符串的向量:

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"

2 个答案:

答案 0 :(得分:2)

您可以创建自定义功能来执行此操作。我们的想法是将字符串拆分为单个字符(observable.doOnNext(i -> if (i==1) doSomethingA(); else if (i==5) doSomethingB(); else doWithEverythingElse()); ),输出将为strsplit(v1, '')。我们可以list将其设为unlist,然后获取vector元素。但是,这还没有排序。根据显示的示例,您可能希望unique字母和其他字符的方式不同。因此,我们使用sort索引&#39; LETTER&#39;字符,并将其用于单独grep向量子集并将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" ,但我没有这样做,因为“ID”的预期结果是&#39;专栏不同。

答案 1 :(得分:1)

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