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