如何在存储在 R 数据框列中的逗号分隔字符串中查找唯一值的数量?
如果我们有包含重复和唯一值的逗号分隔值,那么我们可能想要找到每个逗号分隔值中唯一值的数量。要查找存储在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