我正在尝试找到一种干净的方法来获取我的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分钟,否则我的老板认为它太慢了。
希望这是可以理解的
答案 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])