R根据字符串搜索

时间:2017-11-10 13:49:42

标签: r indexing data.table pattern-matching

我正在尝试找到一种干净的方法来获取我的DT的第一列,对于每一行,等于在其他列中找到的user_id。也就是说,我必须在每一行中搜索“user_id”,并返回找到实例的整个单元格。

我首先尝试获取找到部分匹配的列的索引,然后使用它来设置第一列的值,但它不起作用。例如:

       user_id          1             2
   1:     N/A          300       user_id154
   2:     N/A   user_id301    user_id125040
   3:     N/A          302         user_id2

例如,我想获得以下

   **user_id**
  user_id154
  user_id301
  user_id2

请记住我是R中的这种数据格式化的新手(我做的大部分工作都不涉及清理JSON文件..),而且我的data.table超过1M行。答案不需要超级有效,但绝对不应该超过5分钟,否则我的老板认为它太慢了。

希望这是可以理解的

2 个答案:

答案 0 :(得分:1)

我确信有人会提供一个更优雅的解决方案,但这就是诀窍:

dt[, user_id := str_extract(str_c(1, 2), "user_id[0-9]*")]

这首先组合所有列每行,然后对于每一行,查找组合值中的第一个user_id。

(需要stringr包)

答案 1 :(得分:0)

对于表grep中的每一行,其中包含"user_id"的第一个值并将结果放入列user_id

df$user_id <- apply(df, 1, function(x) grep("user_id", x, value = TRUE)[1])