R 带模式的子集
假设我有一个数据帧dfR 带模式的子集,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 <- 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
df2BaseR
现在有一个方便的函数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"))