在数据框的两列或多列中进行 Grep
Grep in two or more columns of a dataframe
我有一个数据框,我想知道其中的某些字符串是否出现在某些列中,然后获取它们的行号,我正在使用它:
keywords <- c("knowledge management", "gestión del conocimiento")
npox <- grep(paste(keywords, collapse = "|"), full[,c(7)], ignore.case = T)
然而,这不适用于两列或更多列,只有一列 full[,c(7)]
谁知道我该怎么办?
示例数据 (csv):https://tempsend.com/rxucj
不要在单个列上使用 grep
,而是在整个数据帧上使用 grepl
作为字符矩阵。这将 return 一个逻辑向量。将逻辑向量转换为与原始数据框同维的矩阵,然后运行which
,指定arr.ind = TRUE
。这将为您提供正则表达式的所有匹配项的行和列。
keywords <- c("knowledge management", "gestión del conocimiento")
npox <- grepl(paste(keywords, collapse = "|"), as.matrix(full), ignore.case = T)
which(matrix(npox, nrow = nrow(full)), arr.ind = TRUE)
#> row col
#> [1,] 16 8
#> [2,] 15 9
#> [3,] 15 10
#> [4,] 16 15
#> [5,] 16 23
比如我们可以看到第16行第8列有匹配。我们可以通过以下方式确认这一点:
full[16, 8]
#> [1] "The Impact of Human Resource Management Practices, Organisational
#> Culture, Organisational Innovation and Knowledge Management on Organisational
#> Performance in Large Saudi Organisations: Structural Equation Modeling With
#> Conceptual Framework"
我们在这个单元格中看到“知识管理”。
如果您想将结果限制在某些列中,可能最简单的方法是事后过滤掉结果。例如,假设我将 full
中的所有匹配项存储到名为 matches
:
的变量中
matches <- which(matrix(npox, nrow = nrow(full)), arr.ind = TRUE)
但我只对第 7、8 和 9 列的匹配感兴趣,那么我可以这样做:
matches[matches[,'col'] %in% c(7, 8, 9),]
#> row col
#> [1,] 16 8
#> [2,] 15 9
我有一个数据框,我想知道其中的某些字符串是否出现在某些列中,然后获取它们的行号,我正在使用它:
keywords <- c("knowledge management", "gestión del conocimiento")
npox <- grep(paste(keywords, collapse = "|"), full[,c(7)], ignore.case = T)
然而,这不适用于两列或更多列,只有一列 full[,c(7)]
谁知道我该怎么办?
示例数据 (csv):https://tempsend.com/rxucj
不要在单个列上使用 grep
,而是在整个数据帧上使用 grepl
作为字符矩阵。这将 return 一个逻辑向量。将逻辑向量转换为与原始数据框同维的矩阵,然后运行which
,指定arr.ind = TRUE
。这将为您提供正则表达式的所有匹配项的行和列。
keywords <- c("knowledge management", "gestión del conocimiento")
npox <- grepl(paste(keywords, collapse = "|"), as.matrix(full), ignore.case = T)
which(matrix(npox, nrow = nrow(full)), arr.ind = TRUE)
#> row col
#> [1,] 16 8
#> [2,] 15 9
#> [3,] 15 10
#> [4,] 16 15
#> [5,] 16 23
比如我们可以看到第16行第8列有匹配。我们可以通过以下方式确认这一点:
full[16, 8]
#> [1] "The Impact of Human Resource Management Practices, Organisational
#> Culture, Organisational Innovation and Knowledge Management on Organisational
#> Performance in Large Saudi Organisations: Structural Equation Modeling With
#> Conceptual Framework"
我们在这个单元格中看到“知识管理”。
如果您想将结果限制在某些列中,可能最简单的方法是事后过滤掉结果。例如,假设我将 full
中的所有匹配项存储到名为 matches
:
matches <- which(matrix(npox, nrow = nrow(full)), arr.ind = TRUE)
但我只对第 7、8 和 9 列的匹配感兴趣,那么我可以这样做:
matches[matches[,'col'] %in% c(7, 8, 9),]
#> row col
#> [1,] 16 8
#> [2,] 15 9