如何在儲存在 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
廣告