在数据框中查找字符串的每个位置 - R

9

我有一个数据框,看起来像这样:

a <- c("jan", "mar", "jan", "feb", "feb")
b <- c("feb", "mar", "mar", "jan", "mar")
c <- c("jan", "feb", "feb", "jan", "jan")
d <- c("jan", "mar", "jan", "feb", "feb")
e <- c("feb", "jan", "feb", "mar", "mar")
f <- c("jan", "feb", "feb", "jan", "jan")
xxx <- data.frame(a,b,c,d,e,f)
xxx

我需要在xxx中找到每个字符串实例(比如"jan")的位置。我可以采用一个笨拙的方法,遍历数据框(df)中的每个插槽并检查它是否等于"jan",但肯定有更好的方法。理想情况下,希望能将结果作为坐标列表返回。

非常感谢您的帮助!

2个回答

11

函数which有一个名为arr.ind的参数,它将给出一个2列矩阵,指示每个匹配项的位置

which(xxx == "jan", arr.ind=TRUE)
      row col
 [1,]   1   1
 [2,]   3   1
 [3,]   4   2
 [4,]   1   3
 [5,]   4   3
 [6,]   5   3
 [7,]   1   4
 [8,]   3   4
 [9,]   2   5
[10,]   1   6
[11,]   4   6
[12,]   5   6

太好了,我很高兴问了!那正是我所需要的。非常感谢。 - jdfinch3
好的。我知道这对于矩阵会起作用,但对于数据框我不太自信。 - IRTFM
2
@BondedDust - == 在调用 which 之前将数据框转换为逻辑矩阵。 - Rich Scriven
如果数据框的列具有不同的模式,会发生什么? - Alex
无论如何,矩阵都会变成逻辑矩阵。但我认为在此之前,它必须全部转换为字符,至少我是这样认为的。 - Rich Scriven
@Alex,强制类型转换以标准的R方式进行。通常,在与字符串进行比较时,大多数其他类型都会被强制转换为字符串。 - Ricardo Saporta

2
首先,可以通过以下方式获取要测试的字符串集合:
mnths <- unique(c(t(xxx)))

例如,对于第一个元素“jan”,实例的位置可以通过以下方式给出:

which(xxx == mnths[1], arr.ind = TRUE)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接