R 如何比较两个字符串向量之间匹配的语句数

R 如何比较两个字符串向量之间匹配的语句数,r,R,我还想看看哪些字符串是不同的,以便其他预期输出应该如下所示(也是原始数据帧的一部分) Same基本Router函数将对两个向量的每个元素的每个组合应用一个函数。因此,使用外部和'='将比较每个向量的每个元素: Filtered$Same<-intersect(Filtered$A,Filtered$B) Filtered$InAButNotB<-setdiff(Filtered$A,Filtered$B) 使用tidyverse函数,您可以尝试以下操作: Test1[Test1 %

我还想看看哪些字符串是不同的,以便其他预期输出应该如下所示(也是原始数据帧的一部分)


Same基本R
outer
函数将对两个向量的每个元素的每个组合应用一个函数。因此,使用
外部
'='
将比较每个向量的每个元素:

Filtered$Same<-intersect(Filtered$A,Filtered$B)
Filtered$InAButNotB<-setdiff(Filtered$A,Filtered$B)

使用
tidyverse
函数,您可以尝试以下操作:

Test1[Test1 %in% Test2]
[1] "Everything is normal"      "Its raining cats and dogs"

Test1[!(Test1 %in% Test2)]
[1] "It is all sunny"

Test2[!(Test2 %in% Test1)]
[1] "It is thundering" "Cloudy"    
不过,对于处理向量,如果您只对聚合计数感兴趣,也可以尝试以下方法

Filtered %>%
  summarise(comm = sum(Test1 %in% Test2),
            InA = sum(!(Test1 %in% Test2)),
            InB = sum(!(Test2 %in% Test1)))

该函数在哪个包中过滤?我没有看到它在基地R。道歉一个打字错误。我在你的过滤数据框中编辑了它,你有没有为长度不等的向量设置为NA的缺失值?事实上没有@RichardLusch,我不知道我能做到。你能告诉我怎么做吗?当我在代码中结合Test1和Test2时,我得到一个错误:error in data.frame(Test1,Test2):参数意味着不同的行数:3,4我想知道您在实际数据集中做了什么来克服这一点。我如何使用%in%来比较数据帧中的两列列表?请看dplyr::summary(),但是如何在不获取错误的情况下将结果返回到原始数据帧什么错误?正如您在注释中提到的,如果两列的行数相等,则不会出现错误。如果您收到任何其他错误消息,请相应地更新问题。因此,问题是如果列的行数不相等,如何处理?如果原始向量的长度不相等,则无法运行
Filtered
Filtered$Same<-intersect(Filtered$A,Filtered$B)
Filtered$InAButNotB<-setdiff(Filtered$A,Filtered$B)
Test1<-c("Everything is normal","It is all sunny","Its raining cats and dogs")
Test2<-c("Everything is normal","It is thundering","Its raining cats and dogs","Cloudy")

# test each element in Test1 for equality with each element in Test2
compare <- outer(Test1, Test2, '==') 

# calculate overlaps and uniques
overlaps <- sum(compare) # number of overlaps: 2
unique.test1 <- (rowSums(compare) == 0) # in Test1 but not Test2
unique.test2 <- (colSums(compare) == 0) # in Test2 but not Test1

# return uniques
OnlyInA <- Test1[unique.test1]
OnlyInB <- Test2[unique.test2]
same <- Test1[rowSums(compare) == 1]

# counts
n.unique.a <- sum(unique.test1)
n.unique.b <- sum(unique.test2)
Test1[Test1 %in% Test2]
[1] "Everything is normal"      "Its raining cats and dogs"

Test1[!(Test1 %in% Test2)]
[1] "It is all sunny"

Test2[!(Test2 %in% Test1)]
[1] "It is thundering" "Cloudy"    
Filtered %>%
  summarise(comm = sum(Test1 %in% Test2),
            InA = sum(!(Test1 %in% Test2)),
            InB = sum(!(Test2 %in% Test1)))
length(intersect(Test1,Test2))
length(setdiff(Test1,Test2))