我有一个包含不同变量的数据帧。例如:
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“。
使用子集,可能如下所示:
dat <- subset(dat, select = -c(x*))
这里,"*“是占位符。
或者只使用"select":
dat <- select(dat, -x*)
结果应该如下所示:
dat <- select(dat, -x*)
> dat
y05_p y06_p y07_p
1 5 4 3
2 6 5 4
3 7 6 5
或者使用另一个示例:
dat <- select(dat, -y*_p)
> dat
x10 x11 x12
1 1 3 1
2 2 2 2
3 3 1 3
我非常感谢您的帮助。
发布于 2019-07-16 03:08:15
使用starts_with()
。
library(dplyr)
dat %>% select(-starts_with("x"))
还有其他类似的函数(ends_with
、matches
、contains
、one_of
)。如果其他方法都失败了,你可以随时使用正则表达式和基本R:
dat <- dat[ , !grepl("^x", colnames(dat)) ]
说明:grepl
返回一个逻辑向量。正则表达式"^x"
匹配任何以x
开头的内容。这与dat的列名相匹配。我们用bang (!
)对逻辑向量求反,从而选择与我们的正则表达式不匹配的所有内容。
发布于 2019-07-16 03:10:24
使用grep
及其参数invert = TRUE
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
idx <- !startsWith(names(dat), prefix = placeholder)
https://stackoverflow.com/questions/57045769
复制相似问题