r - 解析出字符串,将其设置为 R data.table 中的因子列

标签 r data.table

我真的找不到一种优雅的方式来实现这一点,请帮忙。

我有一个 DT data.table:

name,value
"lorem pear ipsum",4
"apple ipsum lorem",2
"lorem ipsum plum",6

并基于列表 Fruits <- c("pear", "apple", "plum") 我想创建一个因子类型列。
name,value,factor
"lorem pear ipsum",4,"pear"
"apple ipsum lorem",2,"apple"
"lorem ipsum plum",6,"plum"

我想这是基本的,但我有点卡住了,这是我得到的程度:
DT[grep("apple", name, ignore.case=TRUE), factor := as.factor("apple")]
提前致谢。

最佳答案

您可以使用正则表达式对其进行矢量化,例如通过使用 gsub() :

设置数据:

strings <- c("lorem pear ipsum", "apple ipsum lorem", "lorem ipsum plum")
fruit <- c("pear", "apple", "plum")

现在创建一个正则表达式
ptn <- paste0(".*(", paste(fruit, collapse="|"), ").*")
gsub(ptn, "\\1", strings)
[1] "pear"  "apple" "plum" 

正则表达式的工作原理是用 | 分隔每个搜索元素,嵌入在括号内:
ptn
[1] ".*(pear|apple|plum).*"

要在数据表中执行此操作,根据您的问题,就像这样简单:
library(data.table)
DT <- data.table(name=strings, value=c(4, 2, 6))
DT[, factor:=gsub(ptn, "\\1", strings)]
DT

                name value factor
1:  lorem pear ipsum     4   pear
2: apple ipsum lorem     2  apple
3:  lorem ipsum plum     6   plum

关于r - 解析出字符串,将其设置为 R data.table 中的因子列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15277894/

相关文章:

r - 使用另一个数据框和 grepl 在数据框中搜索字符串

r - 如何在 RODBC 中运行 SQL 更新语句?

r - 在数据框创建的循环中,使用 data.table 包中的 set() 将值从一个数据框复制并粘贴到另一个数据框

r - 通过从表数组中选择每一行来构建 R data.table

regex - 删除特定序列后的第一个字符

r - 如何从 R 中的 for 循环填充矩阵

r - CRAN 可接受的链接到 OpenMP 的方式,某些从 Rcpp 调用的 C 代码

r - 一起使用 data.table 和 tidy eval : why group by does not work as expected, 为什么插入 ~ ?

r - data.table 中的笛卡尔连接

R:按 ID 和按指定数据聚合历史记录