gpt4 book ai didi

r - 统计出现次数,字符串顺序只统计1x

转载 作者:行者123 更新时间:2023-12-02 09:07:57 35 4
gpt4 key购买 nike

使用更准确的数据集示例修改了问题

我有几个不同的列表,每个列表都包含许多字符。我在这里写了一个非常简短的例子

List1 <- "A + B + C + D + E:F + F:E"

List2<- "A + B + C + E:F + F:E + G:H + H:G"

List3 <- "J + K + L + L:H + L:H1"

我试图通过所有这些列表查找出现的频率,但某些项目的重复导致了问题。

通过大量循环,以及 X %in% Y、strsplit(在“:”之前和之后拆分),我得到了这个

 sig_var8
var count
1 0 0
2 A 2
3 B 2
4 C 2
5 D 1
6 E:F 2
7 F:E 2
8 G:H 1
9 H:G 1
10 J 1
11 K 1
12 L 1
13 L:H 1
14 L:H1 1

我想要的是这样的:

sig_var8
var count
1 0 0
2 A 2
3 B 2
4 C 2
5 D 1
6 E:F 2
7 G:H 1
8 J 1
9 K 1
10 L 1
11 L:H 1
12 L:H1 1

注意:在列表1中,E:F和F:E被认为是相同的并且只出现一次。与列表 2 相同,其中 G:H == H:G,并且只计数一次。请注意,grep 不是最好的,因为列表 3 中的 L:H 和 L:H1 不同,它们需要单独计数(因此有 %in%)。

这是我编写的代码:

sig_var8<-data.frame(matrix(data=0,nrow=1,ncol=2))
colnames(sig_var8)<-c("var","count")
sig_var8[,1]<-as.character(sig_var8[,1])
sig_var8[,2]<-as.numeric(sig_var8[,2])


for(list in 1:3){
temp_list<-get(paste0("List",list)) #get the equation above
assign(paste0("List",list,"a"), gsub(" ","",temp_list)) #remove all spaces in the sentence
assign(paste0("List",list,"a_split"), strsplit(get(paste0("List",list,"a")),"[+]")) #split where "+" are
temp_listA<-get(paste0("List",list,"a_split"))[[1]]
for (item in 1:length(temp_listA)){
if(isTRUE(temp_listA[item] %in% sig_var8[,1])){
row_n<-which(sig_var8[,1]==temp_listA[item])
sig_var8[row_n,2]<-sig_var8[row_n,2]+1
}
if(isFALSE(temp_listA[item] %in% sig_var8[,1])){
row_n<-nrow(sig_var8)
sig_var8[row_n+1,1]<-temp_listA[item]
sig_var8[row_n+1,2]<-1
}
}
}

最佳答案

也许像下面这样的东西可以满足您的需求。

Lst <- mget(ls(pattern = "^List"))

Lst <- lapply(Lst, function(x) {
L <- strsplit(x, ":")
res <- sapply(L, function(y){
paste(sort(y), collapse = ":")
})
unique(res)
})

table(unlist(Lst))
#
# A B C D E:F G:H H:L H1:L J K L
# 2 2 2 1 2 1 1 1 1 1 1

关于r - 统计出现次数,字符串顺序只统计1x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55733188/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com