假设我有以下数据框,其中包含两个包含字符串的向量:
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"
答案 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))
}