R 用子字符串向量子集data.table

R 用子字符串向量子集data.table,r,substring,data.table,subset,R,Substring,Data.table,Subset,假设我们得到了这个数据表X: Random <- function(n=1, lenght=6){ randomString <- c(1:n) for (i in 1:n){randomString[i] <- paste(sample(c(0:9, letters, LETTERS), lenght, replace=TRUE),collapse="")} return(randomStrin

假设我们得到了这个数据表
X

Random <- function(n=1, lenght=6){
  randomString <- c(1:n)
  for (i in 1:n){randomString[i] <- paste(sample(c(0:9, letters, LETTERS),
                                   lenght, replace=TRUE),collapse="")}
  return(randomString)}

X <- data.table(A = rnorm(11000, sd = 0.8),
                B = rnorm(11000, mean = 10, sd = 3),
                C = sample( LETTERS[1:24], 11000, replace=TRUE),
                D = sample( letters[1:24], 11000, replace=TRUE),
                E = round(rnorm(11000,mean=25, sd=3)),
                F = round(runif(n = 11000,min = 1000,max = 25000)),
                G = round(runif(11000,0,200000)),
                H = Random(11000))
但我的问题是在一次操作中为
g
F
d
复制这一点

Vec <- c("g","F","d")
Newtable <- X[like(H,pattern = Vec)]
Warning message:
In grep(pattern, levels(vector)) :
  argument 'pattern' has length > 1 and only the first element will be used

Vec我们可以使用
grep
通过
paste
vector
压缩成单个字符串,方法是使用
压缩
ing

X[grep(paste(Vec, collapse="|"), H)]
或者,我们也可以使用相同的方法,通过
粘贴
模式
向量
折叠
d
(如@Tensibal建议的那样)


我们可以使用
grep
通过
粘贴
向量
压缩成单个字符串,方法是使用
|

X[grep(paste(Vec, collapse="|"), H)]
或者,我们也可以使用相同的方法,通过
粘贴
模式
向量
折叠
d
(如@Tensibal建议的那样)


我想你也可以用这个:

NewTable <- X[grepl("g",H) | grepl("F",H)  | grepl("d",H)]

NewTable我想你也可以用这个:

NewTable <- X[grepl("g",H) | grepl("F",H)  | grepl("d",H)]

NewTable我认为像
这样的
只需要一个元素,而不是一个向量。尝试使用
Vectorize
@Akrun你是对的,这是我的问题。我不知道有什么函数可以为这个操作获取向量。顺便说一句,谢谢你的帮助。我想像这样的
只需要一个元素,而不是向量。尝试使用
Vectorize
@Akrun你是对的,这是我的问题。我不知道有什么函数可以为这个操作获取向量。顺便说一句,谢谢你的帮助。
like
正在引擎盖下使用
grepl
,我假设
paste
方法应该适用于
like
模式
参数也
like
正在引擎盖下使用
grepl
,我假设
paste
方法应该也适用于
模式
参数