3 回答

TA貢獻1813條經驗 獲得超2個贊
試一試grepl您的名字data.frame。grepl將正則表達式與目標TRUE匹配,如果找到匹配項則返回,FALSE否則返回。該函數是矢量化的,因此您可以傳遞一個字符串向量來進行匹配,并且您將獲得一個返回布爾值的向量。
例
# Data
df <- data.frame( ABC_1 = runif(3),
ABC_2 = runif(3),
XYZ_1 = runif(3),
XYZ_2 = runif(3) )
# ABC_1 ABC_2 XYZ_1 XYZ_2
#1 0.3792645 0.3614199 0.9793573 0.7139381
#2 0.1313246 0.9746691 0.7276705 0.0126057
#3 0.7282680 0.6518444 0.9531389 0.9673290
# Use grepl
df[ , grepl( "ABC" , names( df ) ) ]
# ABC_1 ABC_2
#1 0.3792645 0.3614199
#2 0.1313246 0.9746691
#3 0.7282680 0.6518444
# grepl returns logical vector like this which is what we use to subset columns
grepl( "ABC" , names( df ) )
#[1] TRUE TRUE FALSE FALSE
為了回答第二部分,我將創建子集data.frame,然后創建一個向量來索引要保留的行(邏輯向量),如下所示:
set.seed(1)
df <- data.frame( ABC_1 = sample(0:1,3,repl = TRUE),
ABC_2 = sample(0:1,3,repl = TRUE),
XYZ_1 = sample(0:1,3,repl = TRUE),
XYZ_2 = sample(0:1,3,repl = TRUE) )
# We will want to discard the second row because 'all' ABC values are 0:
# ABC_1 ABC_2 XYZ_1 XYZ_2
#1 0 1 1 0
#2 0 0 1 0
#3 1 1 1 0
df1 <- df[ , grepl( "ABC" , names( df ) ) ]
ind <- apply( df1 , 1 , function(x) any( x > 0 ) )
df1[ ind , ]
# ABC_1 ABC_2
#1 0 1
#3 1 1

TA貢獻1859條經驗 獲得超6個贊
您也可以使用starts_with和dplyr的select(),像這樣:
df <- df %>% dplyr:: select(starts_with("ABC"))
- 3 回答
- 0 關注
- 559 瀏覽
添加回答
舉報