在R中找到模式

时间:2019-02-01 14:53:34

标签: r for-loop if-statement pattern-matching

我正在尝试清除一些数据。以下是我的数据示例。

   test1          test2         test3    
 jsb cjn       kd N069W j        N9DSW 

我想指出哪一列的格式为N0 {num} {num} W。 {num}部分可以是0到9之间的任何数字。此模式也可以出现在字符串中的任何位置。因此,在这种情况下,我的结果将如下所示。

   test1          test2         test3     col
 jsb cjn       kd N069W j        N9DSW      2

在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

我们遍历各列,使用grepl获取逻辑索引,然后使用max.col获取每一行的列索引

max.col(data.frame(lapply(df1, grepl, pattern = "N0\\d{2}W")))
#[1] 2

数据

df1 <- structure(list(test1 = "jsb cjn", test2 = "kd N069W j", 
 test3 = "N9DSW"), class = "data.frame", row.names = c(NA, 
 -1L))

答案 1 :(得分:2)

您还可以使用库 stringr 中的功能str_detect()

library(stringr)
str_detect('kd NO69W j', pattern = "NO\\d+W")
# [1] TRUE

答案 2 :(得分:2)

使用apply

df$col <- apply(df, 1, function(x) grep("N0\\d{2}W", x))

数据:

df <- structure(list(test1 = structure(1L, .Label = "jsb cjn", class = "factor"), 
    test2 = structure(1L, .Label = "kd N069W j", class = "factor"), 
    test3 = structure(1L, .Label = "N9DSW ", class = "factor")), class = "data.frame", row.names = c(NA, 
-1L))