R 带模式的子集

R 带模式的子集,r,R,假设我有一个数据帧df df <- data.frame( a1 = 1:10, b1 = 2:11, c2 = 3:12 ) 这可能吗?可以通过 subset(df, select = grepl("1", names(df))) 为了将其作为一个函数进行自动化,可以使用[进行子集设置。将其与R的一个正则表达式函数相结合,您就拥有了所需的一切 作为一个例子,这里有一个自定义函数,它实现了我上面提到的思想 Subset <- function(df, pattern) { i

假设我有一个数据帧df

df <- data.frame( a1 = 1:10, b1 = 2:11, c2 = 3:12 )

这可能吗?

可以通过

subset(df, select = grepl("1", names(df)))
为了将其作为一个函数进行自动化,可以使用
[
进行子集设置。将其与R的一个正则表达式函数相结合,您就拥有了所需的一切

作为一个例子,这里有一个自定义函数,它实现了我上面提到的思想

Subset <- function(df, pattern) {
  ind <- grepl(pattern, names(df))
  df[, ind]
}

相同但不同:

df2 <- df[, grep("1", names(df))]
   a1 b1
1   1  2
2   2  3
3   3  4
4   4  5
5   5  6
6   6  7
7   7  8
8   8  9
9   9 10
10 10 11

df2Base
R
现在有一个方便的函数
endsWith()

data.table
中,您可以执行以下操作:

library(data.table)
setDT(df)
df[, .SD, .SDcols = patterns("1")]
# Or more precisely
df[, .SD, .SDcols = patterns("1$")]
dplyr
中:

library(dplyr)
select(df, contains("1"))
# Or more precisely
select(df, ends_with("1"))
一个相关的职位是
df2 <- df[, grep("1", names(df))]
   a1 b1
1   1  2
2   2  3
3   3  4
4   4  5
5   5  6
6   6  7
7   7  8
8   8  9
9   9 10
10 10 11
df[, endsWith(names(df), "1")]
library(data.table)
setDT(df)
df[, .SD, .SDcols = patterns("1")]
# Or more precisely
df[, .SD, .SDcols = patterns("1$")]
library(dplyr)
select(df, contains("1"))
# Or more precisely
select(df, ends_with("1"))