簡體   English   中英

數據幀中兩個逗號分隔因子之間的匹配數

[英]Number of Matches Between Two Comma Separated Factors in a Data Frame

我有一個看起來像這樣的數據框:

Row    ID1    ID2    Colors1        Colors2
1      1      2      Green, Blue    Red, Orange
2      1      3      Green, Orange  Orange, Red 

我想創建一個計算,告訴我Colors1和Colors2之間共有的顏色計數。 所需的結果如下:

Row    ID1    ID2    Colors1                Colors2         Common 
1      1      2      Green, Blue, Purple    Green, Purple   2     #Green, Purple
2      1      3      Green, Orange          Orange, Red     1     #Orange

一種替代方法是將第一列視為正則表達式以在第二列中進行搜索,並利用“ stringi”包來促進模式的矢量化搜索。

df <- structure(list(Colors1 = c("Green, Blue, Purple", "Green, Blue", 
"Green, Blue, Purple"), Colors2 = c("Green, Purple", "Green, Purple", 
"Orange, Red")), .Names = c("Colors1", "Colors2"), row.names = c("2", 
"21", "3"), class = "data.frame")

df
#                Colors1       Colors2
# 2  Green, Blue, Purple Green, Purple
# 21         Green, Blue Green, Purple
# 3  Green, Blue, Purple   Orange, Red

library(stringi)
stri_extract_all_regex(df$Colors2, gsub(", ", "|", df$Colors1))
# [[1]]
# [1] "Green"  "Purple"
# 
# [[2]]
# [1] "Green"
# 
# [[3]]
# [1] NA

stri_count_regex(df$Colors2, gsub(", ", "|", df$Colors1))
# [1] 2 1 0

基本上,我所做的是使用gsub將“ Colors1”列轉換為看起來像"Green|Blue|Purple"而不是"Green, Blue, Purple"的正則表達式搜索模式,並將其用作搜索模式在上面演示的每個“字符串”函數中。

您可以使用:

col1 <- strsplit(df$Colors1, ", ")
col2 <- strsplit(df$Colors2, ", ")
df$Common <- sapply(seq_len(nrow(df)), function(x) length(intersect(col1[[x]], col2[[x]])))

df <- data.frame(Colors1 = c('Green, Blue', 'Green, Blue, Purple'), Colors2 = c('Green, Purple', 'Orange, Red'), stringsAsFactors = FALSE)
col1 <- strsplit(df$Colors1, ", ")
col2 <- strsplit(df$Colors2, ", ")
df$Common <- sapply(seq_len(nrow(df)), function(x) length(intersect(col1[[x]], col2[[x]])))
df
#               Colors1         Colors2   Common
# 1         Green, Blue   Green, Purple        1
# 2 Green, Blue, Purple   Orange, Red          0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM