在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
或者使用BaseR
df$Unq_count <- unlist(lapply(strsplit(df$b, ";\\s"), function(x) length(unique(x))))
或者使用BaseR
df$Unq_count <- unlist(lapply(strsplit(df$b, ";\\s"), function(x) length(unique(x))))