【问题标题】:R: Find identical strings in two listsR:在两个列表中查找相同的字符串
【发布时间】:2016-08-30 10:34:31
【问题描述】:

我有两个字符串列表,想找出两个列表中都有哪些字符串。

我尝试将列表转换为向量,以便我可以使用 intersect 或 setequal 但是将所有字符串转换为数字并且(如果有一个我无法弄清楚的明显答案,我很抱歉),我似乎无法转换列表没有发生这种情况。

最好的方法是什么?

编辑: 我有这些数据框:

dput(s)
structure(list(V1 = structure(c(3L, 2L, 1L, 4L), .Label = c("24d2afb212410711de0e237e5435e104", 
"2a3d9ca791a579a14883de538a012e24", "a90b03209a8095ec406809d89d5035c3", 
"f271eb38cc409c6bfe9dcf2bfcab8471"), class = "factor")), .Names = "V1", row.names = c(NA, 
-4L), class = "data.frame")

dput(r)
structure(list(V1 = structure(c(2L, 1L, 4L, 3L), .Label = c("24d2afb212410711de0e237e5435e104", 
"2a3d9ca791a579a14883de538a012e24", "7320e2e921df862968954d4b60e2a80a", 
"a9f47ec7c488d2bcddf2c1adc2bf6305"), class = "factor")), .Names = "V1", row.names = c(NA, 
-4L), class = "data.frame")

我想找到两者中的字符串,即

2a3d9ca791a579a14883de538a012e2424d2afb212410711de0e237e5435e104

as.character() 不适用于保留这些字符串;是否有其他方法可以将它们转换为因子,或者是否有其他操作会更好?

【问题讨论】:

  • 这些lists 的长度是否相等?检查liststr 是否有list 的元素的class?请提供一个可重复的小示例和预期输出。
  • 听起来像是因素。与他们一起尝试as.character(),然后再次尝试您的代码。
  • 添加了更多信息。我试过 as.character() 并完全删除了大部分字符。

标签: r list vector intersect


【解决方案1】:

您还需要在数据框中指定列。

intersect

intersect(r$V1, s$V1)
#[1] "2a3d9ca791a579a14883de538a012e24" "24d2afb212410711de0e237e5435e104"

grep

unlist(sapply(r$V1, function(i)grep(i, s$V1, value = TRUE)))
#[1] "2a3d9ca791a579a14883de538a012e24" "24d2afb212410711de0e237e5435e104"

【讨论】:

  • 谢谢,Sotos,但是当我尝试使用 intersect 时,我得到一个空数据框。当我使用 grep 时,这是我得到的消息(并且没有结果):Warning message: In grep(i, s, value = TRUE) : argument 'pattern' has length > 1 and only the first element will be used
  • 嗯,你能分享一下str() 的列表吗? sapply 应该注意那个警告
  • str(s): 'data.frame': 40909 obs. of 1 variable: $ V1: Factor w/ 33212 levels "0000734ec06af49a2477e8c044fe51fc",..: 16139 15105 13860 2836 20143 29594 21391 15141 11485 32833 ... str(r): 'data.frame': 1091319 obs. of 1 variable: $ V1: Factor w/ 1090874 levels "00002df85d03395bdeb018c35ef8ede8",..: 1080008 717274 1041734 720889 167066 968941 328961 807515 89060 817033 ...
  • @Michael,我编辑了我的答案。现在它应该可以工作了。问题不在于因素,而在于您需要指定列而不仅仅是数据框(即r$V1s$V1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 2014-10-18
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
相关资源
最近更新 更多