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

在R中,从列表中用向量命名列后,如何找到匹配的列名(grep和match give integer(0),NA)?

伍昱
2023-03-14

我可能错过了一些很简单的东西。我有一个向量列表,然后将其用作列名。现在我希望能够找到给定向量的哪一列(索引)。我尝试了grep和match,由于某种原因,当我知道这是第一列时,我得到了NA和integer(0),这是我在查看数据帧时看到的。我做错了什么?下面的代码:

#Loops to create S
S <- list()
i <- 1

for(a in 0:12){
  for(b in 0:(12-a)){
    for(c in 0:(12-a-b)){
      for(d in 0:(12-a-b-c)){
        e <- 12 - a - b - c - d
        S[[i]] <- c(a, b, c, d, e)
        i <- i + 1    
      }
    }
  }
}

P <- matrix(data = NA, nrow = length(S), ncol = length(S))
for(i in 1:length(S)){
  for(j in 1:length(S)){
    
    #lots of stuff
    
  }
}

#Rename P matrix cols/rows
colnames(P) <- S
rownames(P) <- S

#Now I want to find which column has the name "c(0,0,0,0,12)" -- should be first one.  I tried:
grep("c(0, 0, 0, 0, 12)", colnames(P))
match('c(0, 0, 0, 0, 12)', names(P))

谢谢你。

共有1个答案

邢法
2023-03-14

您的match尝试的唯一问题是使用了names(P),并且没有为矩阵定义names()。使用colnamesrownames,它将按预期工作:

match("c(0, 0, 0, 0, 12)", colnames(P))
# [1] 1

match("c(1, 5, 4, 0, 2)", colnames(P))
# [1] 758

您的grep尝试不起作用,因为()是regex中的特殊字符。如果转义括号或设置fixed=true,则可以使用grep,但不应该真正使用grep进行完全的字符串匹配-match==%in%是更好的工具。保存grep以便在需要通过正则表达式进行部分匹配或模式匹配时使用。

 类似资料:
  • 我有一个人名向量列表,每个向量只有名字和姓氏,我有另一个向量列表,每个向量有名字的第一个,中间的,姓氏。我需要匹配这两个列表,以找到包含在这两个列表中的人。因为名称不是按顺序排列的(有些向量以名字作为第一个值,而有些向量以姓氏作为第一个值),所以我想通过查找第二个列表中的哪个向量(全名)包含第一个列表中某个向量的所有值(只有名字和姓氏)来匹配这两个向量。 到目前为止我所做的: 首先,我尝试创建一个

  • 我有一个函数,它返回R中的如下向量 因为它是一个命名的向量,所以我不能在它上面测试下面的内容 is.na() is.null 相同(vec,字符(0) 如何对其编写测试以检查它是否是命名字符(0)向量,然后将其分配给空值?

  • 本文向大家介绍如何在R中将矩阵列转换为向量列表?,包括了如何在R中将矩阵列转换为向量列表?的使用技巧和注意事项,需要的朋友参考一下 如果要使用矩阵的列作为向量,则可以将它们转换为向量列表。要将矩阵列转换为向量列表,我们首先需要将矩阵转换为数据框,然后才能将其读取为列表。这可以作为as.list(as.data.frame(matrix_name))完成。 示例 考虑下面的矩阵- 将矩阵M列转换为向

  • 如果每行的“b”或“c”匹配(等于)“a”,我正在尝试在新列“结果”中打印列名。 这是一个例子,我有10多个列名。 我的df是这样的: 预期结果:

  • 本文向大家介绍如何通过R中data.table中的列名删除列?,包括了如何通过R中data.table中的列名删除列?的使用技巧和注意事项,需要的朋友参考一下 我们可以通过将列设置为NULL来实现 示例 删除一列x 删除两列

  • 问题内容: 这个问题已经在这里有了答案 : 8年前关闭。 可能重复: Python:如何查找列表交集? 我在.txt中有两个数据列表 我想找出在两个列表中都出现的名字。我该怎么做? 问题答案: 使用集: 该运营商表示“给我这两个集合的交集” 或者,您可以使用以下方法: