在R中计算数据帧中分隔的唯一字符串

在R中计算数据帧中分隔的唯一字符串,r,stringr,stringi,R,Stringr,Stringi,我有一个数据框,如下所示: a <- c(1, 2, 3, 4) b <- c("AA; AA; BC", "BC; DE", "AA; BC; BC", "DE; DE") df <- data.frame(a,b) a我们可以在分隔符处拆分字符串,使用stri_unique应用list元素,并获得列表的长度 library(dplyr) library(purrr) library(str

我有一个数据框,如下所示:

a <- c(1, 2, 3, 4)
b <- c("AA; AA; BC", "BC; DE", "AA; BC; BC", "DE; DE")
df <- data.frame(a,b)

a我们可以在分隔符处拆分字符串,使用
stri_unique
应用
list
元素,并获得
列表的
长度

library(dplyr)
library(purrr)  
library(stringi)  
df %>% 
    mutate(new_column = lengths(map(strsplit(b, ";\\s*"), stri_unique)))
-输出

# a          b new_column
#1 1 AA; AA; BC          2
#2 2     BC; DE          2
#3 3 AA; BC; BC          2
#4 4     DE; DE          1

我们可以在分隔符处拆分字符串,使用
stri_unique
应用
list
元素,并获得
列表的
长度

library(dplyr)
library(purrr)  
library(stringi)  
df %>% 
    mutate(new_column = lengths(map(strsplit(b, ";\\s*"), stri_unique)))
-输出

# a          b new_column
#1 1 AA; AA; BC          2
#2 2     BC; DE          2
#3 3 AA; BC; BC          2
#4 4     DE; DE          1

使用
strsplit
+
uniqueN

> setDT(df)[, uniqCnt := sapply(strsplit(b, ";\\s"), uniqueN)][]
   a          b uniqCnt
1: 1 AA; AA; BC       2
2: 2     BC; DE       2
3: 3 AA; BC; BC       2
4: 4     DE; DE       1

使用
strsplit
+
uniqueN

> setDT(df)[, uniqCnt := sapply(strsplit(b, ";\\s"), uniqueN)][]
   a          b uniqCnt
1: 1 AA; AA; BC       2
2: 2     BC; DE       2
3: 3 AA; BC; BC       2
4: 4     DE; DE       1

或者使用Base
R

df$Unq_count <-  unlist(lapply(strsplit(df$b, ";\\s"), function(x) length(unique(x))))

或者使用Base
R

df$Unq_count <-  unlist(lapply(strsplit(df$b, ";\\s"), function(x) length(unique(x))))