模式的子集

Wet*_*eet 6 r

假设我有一个数据框df

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

我希望对列进行子集化,但是使用模式

df1 <- subset( df, select= (pattern = "1") )
Run Code Online (Sandbox Code Playgroud)

要得到

> df1
   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
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Rei*_*son 9

可以通过这样做

subset(df, select = grepl("1", names(df)))
Run Code Online (Sandbox Code Playgroud)

为了将其作为一种功能自动化,可以使用use [来进行子集化.结合R的正则表达式功能之一,您就拥有了所需的一切.

举一个例子,这里是一个实现我上面提到的想法的自定义功能.

Subset <- function(df, pattern) {
  ind <- grepl(pattern, names(df))
  df[, ind]
}
Run Code Online (Sandbox Code Playgroud)

请注意,这不是错误检查等,只是依赖于grepl返回一个逻辑向量,指示哪些列匹配pattern,然后[按列传递给子集.适用于你的df这个给出:

> Subset(df, pattern = "1")
   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
Run Code Online (Sandbox Code Playgroud)