假设我有一个数据框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)
这可能吗?
可以通过这样做
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)