首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用占位符子集r中的数据帧

如何使用占位符子集r中的数据帧
EN

Stack Overflow用户
提问于 2019-07-16 03:04:35
回答 2查看 165关注 0票数 0

我有一个包含不同变量的数据帧。例如:

代码语言:javascript
复制
 x10 <- c(1, 2, 3)
 x11 <- c(3, 2, 1)
 x12 <- c(1, 2, 3)

 y05_p <- c(5, 6, 7)
 y06_p <- c(4, 5, 6)
 y07_p <- c(3, 4, 5)

 dat <- data.frame(x10, x11, x12, y05_p, y06_p, y07_p)

 > dat
   x10 x11 x12 y05_p y06_p y07_p
 1   1   3   1     5     4     3
 2   2   2   2     6     5     4
 3   3   1   3     7     6     5

现在我想去掉一些变量,但有特定的条件:例如,所有变量都称为"x",无论后面是什么数字。换句话说:我想使用一个“占位符”来删除每个变量,包括名称中的"x“。

使用子集,可能如下所示:

代码语言:javascript
复制
 dat <- subset(dat, select = -c(x*))

这里,"*“是占位符。

或者只使用"select":

代码语言:javascript
复制
 dat <- select(dat, -x*)

结果应该如下所示:

代码语言:javascript
复制
 dat <- select(dat, -x*)

 > dat
   y05_p y06_p y07_p
 1     5     4     3
 2     6     5     4
 3     7     6     5

或者使用另一个示例:

代码语言:javascript
复制
 dat <- select(dat, -y*_p)

 > dat
   x10 x11 x12
 1   1   3   1
 2   2   2   2
 3   3   1   3

我非常感谢您的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-16 03:08:15

使用starts_with()

代码语言:javascript
复制
library(dplyr)
dat %>% select(-starts_with("x"))

还有其他类似的函数(ends_withmatchescontainsone_of)。如果其他方法都失败了,你可以随时使用正则表达式和基本R:

代码语言:javascript
复制
dat <- dat[ , !grepl("^x", colnames(dat)) ]

说明:grepl返回一个逻辑向量。正则表达式"^x"匹配任何以x开头的内容。这与dat的列名相匹配。我们用bang (!)对逻辑向量求反,从而选择与我们的正则表达式不匹配的所有内容。

票数 1
EN

Stack Overflow用户

发布于 2019-07-16 03:10:24

使用grep及其参数invert = TRUE

代码语言:javascript
复制
placeholder <- "x"
idx <- grep(pattern = placeholder, names(dat), invert = TRUE)
dat[idx]
  y05_p y06_p y07_p
1     5     4     3
2     6     5     4
3     7     6     5

如果您想要排除以"x“开头的列,请使用startsWith

代码语言:javascript
复制
idx <- !startsWith(names(dat), prefix = placeholder)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57045769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档