如何查找 R 数据框列中存储的逗号分隔字符串中唯一值的数量?
r programmingserver side programmingprogramming
如果我们有包含重复值和唯一值的逗号分隔值,那么我们可能想要查找每个逗号分隔值中唯一值的数量。要查找 R 数据框列中存储的逗号分隔字符串中的唯一值,我们可以使用 stringi 包的 stri_extract_all_regex 函数以及 sapply 函数。
查看以下示例以了解如何完成此操作。
示例 1
以下代码片段创建了一个示例数据框 −
x<-sample(c("3,2,3,4,5,4,3","5,5,6,7,8,6,8","3,2","5,9,8,0"),20,replace=TRUE) df1<-data.frame(x) df1
创建以下数据框 −
x 1 5,5,6,7,8,6,8 2 5,9,8,0 3 5,9,8,0 4 3,2 5 5,5,6,7,8,6,8 6 3,2,3,4,5,4,3 7 3,2,3,4,5,4,3 8 3,2 9 3,2 10 5,5,6,7,8,6,8 11 3,2 12 5,5,6,7,8,6,8 13 5,5,6,7,8,6,8 14 3,2 15 5,5,6,7,8,6,8 16 5,9,8,0 17 5,5,6,7,8,6,8 18 3,2 19 3,2 20 5,9,8,0
要加载 stringi 包并查找 x 每个值中唯一值的数量,请将以下代码添加到上面的代码片段中 −
library(stringi) df1$Unique_in_x<-sapply(stri_extract_all_regex(df1$x,"[0-9]+"),function(x) length(unique(x))) df1
输出
如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −
x Unique_in_x 1 5,5,6,7,8,6,8 4 2 5,9,8,0 4 3 5,9,8,0 4 4 3,2 2 5 5,5,6,7,8,6,8 4 6 3,2,3,4,5,4,3 4 7 3,2,3,4,5,4,3 4 8 3,2 2 9 3,2 2 10 5,5,6,7,8,6,8 4 11 3,2 2 12 5,5,6,7,8,6,8 4 13 5,5,6,7,8,6,8 4 14 3,2 2 15 5,5,6,7,8,6,8 4 16 5,9,8,0 4 17 5,5,6,7,8,6,8 4 18 3,2 2 19 3,2 2 20 5,9,8,0 4
示例 2
以下代码片段创建了一个示例数据框 −
y<-sample(c("A,G,R,T,D","Y,I,H,H,F,E,L","T,W,E,E,E,D,S,R"),20,replace=TRUE) df2<-data.frame(y) df2
创建以下数据框 −
y 1 Y,I,H,H,F,E,L 2 A,G,R,T,D 3 Y,I,H,H,F,E,L 4 Y,I,H,H,F,E,L 5 A,G,R,T,D 6 Y,I,H,H,F,E,L 7 Y,I,H,H,F,E,L 8 A,G,R,T,D 9 A,G,R,T,D 10 A,G,R,T,D 11 Y,I,H,H,F,E,L 12 Y,I,H,H,F,E,L 13 T,W,E,E,E,D,S,R 14 Y,I,H,H,F,E,L 15 A,G,R,T,D 16 T,W,E,E,E,D,S,R 17 T,W,E,E,E,D,S,R 18 A,G,R,T,D 19 A,G,R,T,D 20 Y,I,H,H,F,E,L
要查找 y 每个值中唯一值的数量,请将以下代码添加到上面的代码片段中 −
df2$Unique_in_y<-sapply(stri_extract_all_regex(df2$y,"[A-Z]+"),function(x) length(unique(x))) df2
输出
如果将上述所有代码片段作为单个程序执行,则会生成以下输出 −
y Unique_in_y 1 Y,I,H,H,F,E,L 6 2 A,G,R,T,D 5 3 Y,I,H,H,F,E,L 6 4 Y,I,H,H,F,E,L 6 5 A,G,R,T,D 5 6 Y,I,H,H,F,E,L 6 7 Y,I,H,H,F,E,L 6 8 A,G,R,T,D 5 9 A,G,R,T,D 5 10 A,G,R,T,D 5 11 Y,I,H,H,F,E,L 6 12 Y,I,H,H,F,E,L 6 13 T,W,E,E,E,D,S,R 6 14 Y,I,H,H,F,E,L 6 15 A,G,R,T,D 5 16 T,W,E,E,E,D,S,R 6 17 T,W,E,E,E,D,S,R 6 18 A,G,R,T,D 5 19 A,G,R,T,D 5 20 Y,I,H,H,F,E,L 6