列名称的复杂模式的子集数据帧

埃里克·格林

我有一个数据集,如下所示:

  • 两轮数据(.t0.t1
  • 多个刻度(thisthat
  • 每一等级的几个项目(12222a
  • 几个变量忽略(v2v3ignore.t0ignore.t1this.t0this.t1that.t0that.t1

dat <- data.frame(id = seq(from=1, to=10, by=1),
                  v2 = rnorm(10),
                  v3 = rnorm(10),
                  ignore.t0 = rnorm(10),
                  this.t0 = rnorm(10),
                  this1.t0 = rnorm(10),
                  this22.t0 = rnorm(10),
                  this22a.t0 = rnorm(10),
                  that.t0 = rnorm(10),
                  that1.t0 = rnorm(10),
                  that22.t0 = rnorm(10),
                  that22a.t0 = rnorm(10),
                  ignore.t1 = rnorm(10),
                  this.t1 = rnorm(10),
                  this1.t1 = rnorm(10),
                  this22.t1 = rnorm(10),
                  this22a.t1 = rnorm(10),
                  that.t1 = rnorm(10),
                  that1.t1 = rnorm(10),
                  that22.t1 = rnorm(10),
                  that22a.t1 = rnorm(10))

我想对数据框进行子集化,使其id仅包含以下内容:

  • 标尺名称(thisthat)AND
  • 句号前的数字(1.)或数字和字母(22a.

所以最后,数据框应如下所示:

dat2 <- data.frame(
                   id = seq(from=1, to=10, by=1),
                   #v2 = rnorm(10),
                   #v3 = rnorm(10),
                   #ignore.t0 = rnorm(10),
                   #this.t0 = rnorm(10),
                   this1.t0 = rnorm(10),
                   this22.t0 = rnorm(10),
                   this22a.t0 = rnorm(10),
                   #that.t0 = rnorm(10),
                   that1.t0 = rnorm(10),
                   that22.t0 = rnorm(10),
                   that22a.t0 = rnorm(10),
                   #ignore.t1 = rnorm(10),
                   #this.t1 = rnorm(10),
                   this1.t1 = rnorm(10),
                   this22.t1 = rnorm(10),
                   this22a.t1 = rnorm(10),
                   #that.t1 = rnorm(10),
                   that1.t1 = rnorm(10),
                   that22.t1 = rnorm(10),
                   that22a.t1 = rnorm(10))

数据框比此处显示的要大得多,因此无法键入列索引。它也不可能只认准规模名字,因为this.t0this.t1that.t0,并that.t1会被捕捉。

# not quite right
dat2$id <- dat$id
scales <- c("this", "that")
keep.index <- grep(paste(scales,collapse="|"), names(dat))
temp <- dat[keep.index]
dat2 <- cbind(dat2, temp)

如何修改grep模式以在句点前查找数字OR(数字和字符)?还是在一起有更好的方法?

这适用于您的示例:

dat[c("id", grep("(this|that)\\d+[a-z]?\\.", names(dat), value = TRUE))]

哪里:

  1. \\d+ 用于一位或多位数字
  2. [a-z]? 用于零个或一个小写字母
  3. \\. 为点

如果您想为各种动态创建模式scales,可以执行以下操作:

scales <- c("this", "that")
pattern <- sprintf("(%s)\\d+[a-z]?\\.", paste(scales, collapse = "|"))
dat[c("id", grep(pattern, names(dat), value = TRUE))]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

基于列名称的字符向量的子集数据帧

来自分类Dev

基于重复模式的子集数据帧

来自分类Dev

向量中基于搜索模式的子集数据帧

来自分类Dev

基于列名的部分匹配的子集数据

来自分类Dev

基于列名的部分匹配的子集数据

来自分类Dev

使用增量变量名称从R数据帧子集数据

来自分类Dev

基于每组行数的子集数据帧

来自分类Dev

子集数据帧并计算频率

来自分类Dev

子集数据帧方法的差异

来自分类Dev

如何基于colMeans子集数据帧

来自分类Dev

按日期获取子集数据帧

来自分类Dev

R中的条件子集数据帧

来自分类Dev

基于条件熊猫的子集数据帧

来自分类Dev

在R中子集数据帧后缀

来自分类Dev

子集数据帧并计算频率

来自分类Dev

带R的子集数据帧

来自分类Dev

python中的子集数据帧

来自分类Dev

从子集数据帧创建新数据帧

来自分类Dev

如何用数据的critera向量子集数据帧?

来自分类Dev

子集数据框架以获取行名,列名和值

来自分类Dev

筛选/子集数据帧以适应变化阈值

来自分类Dev

使用grep帮助在R中子集数据帧

来自分类Dev

向量中基于条件的子集数据帧

来自分类Dev

R-仅按时间的子集数据帧

来自分类Dev

反向过滤器/子集数据帧

来自分类Dev

根据组的最大值子集数据帧

来自分类Dev

具有逻辑值矩阵的子集数据帧

来自分类Dev

R-基于重复序列的子集数据帧

来自分类Dev

子集数据帧,但跳过一些行