将具有相同单词但顺序不同的字符串分组
Group strings that have the same words but in a different order
我有一个由两个或三个不同字段创建的示例串联文本字段(请参阅下面的示例数据),但是不能保证单词的顺序相同。我想创建一个新的数据集,其中折叠具有相同单词的字段,无论顺序如何。但是,由于我事先不知道哪些词会被连接在一起,因此代码必须识别出两个字符串中的所有词都匹配。
示例数据的代码:
var1<-c("BLUE|RED","RED|BLUE","WHITE|BLACK|ORANGE","BLACK|WHITE|ORANGE")
freq<-c(1,1,1,1)
have<-as.data.frame(cbind(var1,freq))
有:
var1 freq
BLUE|RED 1
RED|BLUE 1
WHITE|BLACK|ORANGE 1
BLACK|WHITE|ORANGE 1
如何将数据折叠成下面我想要的内容?
color freq
BLUE|RED 2
WHITE|BLACK|ORANGE 2
data.frame(table(sapply(strsplit(have$var1, '\|'),
function(x)paste(sort(x), collapse = '|'))))
Var1 Freq
1 BLACK|ORANGE|WHITE 2
2 BLUE|RED 2
在管道世界中:R > 4.0
have$var1 |>
strsplit('\|')|>
sapply(\(x)paste0(sort(x), collapse = "|"))|>
table()|>
data.frame()
这是一个tidyverse
方法:
library(dplyr)
library(tidyr)
have %>%
group_by(id=row_number()) %>%
separate_rows(var1) %>%
arrange(var1, .by_group = TRUE) %>%
mutate(var1 = paste(var1, collapse = "|")) %>%
slice(1) %>%
ungroup() %>%
count(var1, name = "freq")
var1 freq
<chr> <int>
1 BLACK|ORANGE|WHITE 2
2 BLUE|RED 2
我有一个由两个或三个不同字段创建的示例串联文本字段(请参阅下面的示例数据),但是不能保证单词的顺序相同。我想创建一个新的数据集,其中折叠具有相同单词的字段,无论顺序如何。但是,由于我事先不知道哪些词会被连接在一起,因此代码必须识别出两个字符串中的所有词都匹配。
示例数据的代码:
var1<-c("BLUE|RED","RED|BLUE","WHITE|BLACK|ORANGE","BLACK|WHITE|ORANGE")
freq<-c(1,1,1,1)
have<-as.data.frame(cbind(var1,freq))
有:
var1 freq
BLUE|RED 1
RED|BLUE 1
WHITE|BLACK|ORANGE 1
BLACK|WHITE|ORANGE 1
如何将数据折叠成下面我想要的内容?
color freq
BLUE|RED 2
WHITE|BLACK|ORANGE 2
data.frame(table(sapply(strsplit(have$var1, '\|'),
function(x)paste(sort(x), collapse = '|'))))
Var1 Freq
1 BLACK|ORANGE|WHITE 2
2 BLUE|RED 2
在管道世界中:R > 4.0
have$var1 |>
strsplit('\|')|>
sapply(\(x)paste0(sort(x), collapse = "|"))|>
table()|>
data.frame()
这是一个tidyverse
方法:
library(dplyr)
library(tidyr)
have %>%
group_by(id=row_number()) %>%
separate_rows(var1) %>%
arrange(var1, .by_group = TRUE) %>%
mutate(var1 = paste(var1, collapse = "|")) %>%
slice(1) %>%
ungroup() %>%
count(var1, name = "freq")
var1 freq
<chr> <int>
1 BLACK|ORANGE|WHITE 2
2 BLUE|RED 2