如何在存储在 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
创建以下数据框 -
x1 5,5,6,7,8,6,82 5,9,8,03 5,9,8,04 3,25 5,5,6,7,8,6,86 3,2,3,4,5,4,37 3,2,3,4,5,4,38 3,29 3,210 5,5,6,7,8,6,811 3,212 5,5,6,7,8,6,813 5,5,6,7,8,6,814 3,215 5,5,6,7,8,6,816 5,9,8,017 5,5,6,7,8,6,818 3,219 3,220 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_x1 5,5,6,7,8,6,8 42 5,9,8,0 43 5,9,8,0 44 3,2 25 5,5,6,7,8,6,8 46 3,2,3,4,5,4,3 47 3,2,3,4,5,4,3 48 3,2 29 3,2 210 5,5,6,7,8,6,8 411 3,2 212 5,5,6,7,8,6,8 413 5,5,6,7,8,6,8 414 3,2 215 5,5,6,7,8,6,8 416 5,9,8,0 417 5,5,6,7,8,6,8 418 3,2 219 3,2 220 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
创建以下数据框 -
y1 Y,I,H,H,F,E,L2 A,G,R,T,D3 Y,I,H,H,F,E,L4 Y,I,H,H,F,E,L5 A,G,R,T,D6 Y,I,H,H,F,E,L7 Y,I,H,H,F,E,L8 A,G,R,T,D9 A,G,R,T,D10 A,G,R,T,D11 Y,I,H,H,F,E,L12 Y,I,H,H,F,E,L13 T,W,E,E,E,D,S,R14 Y,I,H,H,F,E,L15 A,G,R,T,D16 T,W,E,E,E,D,S,R17 T,W,E,E,E,D,S,R18 A,G,R,T,D19 A,G,R,T,D20 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_y1 Y,I,H,H,F,E,L 62 A,G,R,T,D 53 Y,I,H,H,F,E,L 64 Y,I,H,H,F,E,L 65 A,G,R,T,D 56 Y,I,H,H,F,E,L 67 Y,I,H,H,F,E,L 68 A,G,R,T,D 59 A,G,R,T,D 510 A,G,R,T,D 511 Y,I,H,H,F,E,L 612 Y,I,H,H,F,E,L 613 T,W,E,E,E,D,S,R 614 Y,I,H,H,F,E,L 615 A,G,R,T,D 516 T,W,E,E,E,D,S,R 617 T,W,E,E,E,D,S,R 618 A,G,R,T,D 519 A,G,R,T,D 520 Y,I,H,H,F,E,L 6