当前位置: 首页 > 知识库问答 >
问题:

如何在矩阵中搜索多个值并返回其行名?

赖渊
2023-03-14

我有两个矩阵,一个是索引矩阵(ncol=1,nrow=20,000),存储我要搜索的值,另一个矩阵是数据矩阵,存储一个大型数据集(ncol=1,nrow=5,000)。

索引矩阵:(,,....是行名)

water    DFAFADFADF
meat     QEREQRQTQTQ
gas      FEQQFQEFQF
.
.
.
..

数据矩阵:(汤姆,路易斯,杰里,文森特,理查德...是行名)

Tom              dfqfqfAFADFADaveffefd
Luis             eqeqfqefAFADFADuouojoimoij
Jerry            dafadfe3321AFADFADfdeff
Vincent          e31413413qeffffff
Richard          121eefq3ffAFADFADfffqffqff
.
.
.
..

我要为index矩阵中的每个值查找data矩阵的哪一行包含该字符串,并记录其data矩阵的行名,并将其放在index矩阵中该字符串行的下列列中(或在一列中,但用“,”分隔)。

例如,我希望有一个循环,首先从索引矩阵中取值“DFAFADFADF”并搜索数据矩阵中的哪些行包含该字符串,因此我发现数据矩阵中的Tom、Luis、Jerry、Richard包含该字符串,因此我将索引矩阵更新为

索引矩阵:

water    DFAFADFADF    Tom, Luis, Jerry, Richard
meat     QEREQRQTQTQ
gas      FEQQFQEFQF
.
.
.
..

然后取index矩阵中的下一个值qereqrqtqtq再次搜索data矩阵,然后再次返回更新index矩阵,直到完成index矩阵的最后一行。

有谁能帮上一个圈套吗?我想我们可能需要一个循环,使用for(...),但不知道如何使用。

共有1个答案

阎慈
2023-03-14
index <- data.frame(one = c("ABC", "DEF", "GHI", "JKL"))
rownames(index) <- c("water", "meat", "fruit", "bread")
data <- data.frame(one = c("ABCDEF", "DEFZMN", "MNOABC", "ZXCJKL"))
rownames(data) <- c("Tom", "Jerry", "Rob", "Nate")

results <- data.frame()
for (r in 1:nrow(index)) {
    index$results[r] <- list(rownames(data)[grep(index$one[r], data$one, ignore.case = T)])
    count <- length(unlist(index$results[r]))
    df <- data.frame(data_match = unlist(index$results[r]),
                     pattern = rep(index$one[r], times = count),
                     index_match = rep(rownames(index)[r], times = count))
    results <- rbind(results, df)
}
reshape2::dcast(results, index_match ~ data_match)

这将在列索引$results中生成list(),因此您可能需要对其调用unlist(),具体取决于您希望如何在下游处理该信息。同样,在R中,您可以有命名向量,在一个情况下,如果您有一个列数据帧,您可能只需要一个命名字符向量,如下所示:

index <- c("ABC", "DEF", "GHI", "JKL")
names(index) <- c("water", "meat", "fruit", "bread")

可能会让下次的匹配更简单。

 类似资料:
  • 这是关联数组: 我知道通过使用过滤数据并比较值的正常方法。我想在中搜索以下键/值对。 理想的输出应该是来自的第一个元素,因为它booking_name=abc,pdg=保证和user_area=es st 我尝试了: 这总是返回空数组。 仅供参考-我是新的。 更新1: 我使用下面的方法来获取具有可见。对所问问题进行了类似的尝试,但未能获得理想的结果。 如何在关联数组上应用作为数组数组传递的多个过滤

  • 我有30个矩阵(1446x1124),包含从0到99的值。我想有一个输出矩阵,具有相同的大小,并且在每个单元中包含该矩阵的一个元素(例如2)在30个输入矩阵上的输出频率(在0和1之间)。

  • 编辑:我根据评论者的推荐添加了for循环,并使其正常工作,但没有使用else或其他if循环,就像我在值不存在时使用的if循环一样,我不想要它,所以只说一次10次。 编辑2:这是教学大纲的链接:https://www.dropbox.com/s/zufjp8sct0jftvw/CS219 Unit 1 Ch 9 Assignment F2T 2015(1). pdf? dl=0 编辑3:现在使用新代

  • 下午好, 我对编码是新手,我需要一些帮助,我已经创建了一个名为alhup的对象Arraylist。alHup包含名为“Company”的对象。 公司存在字符串ID、字符串Companytype、字符串年份、字符串区域、字符串类、int大小、int利润和int区域。 我已经创建了一个单独的类来定义公司。 我已经为String Companytype、String Yeary、String Regio

  • 仅仅进入移动编程和谷歌搜索并没有帮助我。 我想做的是做一个条形码阅读器。我在网上找到了使用视觉等的例子。让它工作得很好。 下面是我要做的。A列有所有的条形码。B列有我公司使用的项目编号。C列有项目说明。 一旦我从扫描器中获得输入,获取该数字并搜索谷歌表格。如果得到匹配,它将从同一行的B列和C列返回信息。 作为一名新手程序员,我需要一个基础来工作,但我很难找到任何东西。 有什么帮助吗?

  • 本文向大家介绍python中返回矩阵的行列方法,包括了python中返回矩阵的行列方法的使用技巧和注意事项,需要的朋友参考一下 实例如下所示: 以上这篇python中返回矩阵的行列方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。