使用grepl过滤特定范围列中的列名

问题描述 投票:0回答:1

我有一个包含这样的 colname 的 df:

[1] "lab_id"               "weeks"                "group"      
[4] "level"                "id_row"               "id"                  
[7] "number"               "tube"                 "dp"              
[10] "time"                "label"                "age"                 
[13] "gender"              "wtspike_ab1"         "wtrbd_ab1"          
[16] "wts1_ab1"            "wts2_ab1"             "wtntd_ab2"          
[19] "wtn_ab2"             "alphaspike_ab2"       "alpharbd_ab2"       
[22] "betaspike_ab2"       "betarbd_ab2"          "gammaspike_ab2"     

我的目标是使用以下方法按列名称过滤此 df:

test1 <- test[, test <- grepl('wtspike|wtrbd|wts1|wts2|wtntd|wtn', colnames(test))]

这可以过滤与模式不匹配的

colnames
,这很好。然而,正在删除元数据列
1:14
,所以我尝试使用类似的东西来避免在列中执行操作
1:14

filtered_test <- test[, 1:14(test) & grepl('wtspike|wtrbd|wts1|wts2|wtntd|wtn', colnames(test))]

这给了我以下错误:

Error: attempt to apply non-function

我的问题与我可以使用什么替代方法来执行相同的操作而不需要列

1:14

  • 是否有更好的替代方案来执行该操作?
  • 我的线路出了什么问题导致我出现该错误?
r
1个回答
0
投票

我没有你的数据,所以我将使用简单的虹膜框架 您可以通过计算名称来决定丢弃什么和保留什么 并对它们进行集合操作;例如

(cn <- colnames(iris))
(drop_by_grep <- cn[grepl('Petal|Sepal',cn)])
(except_not <- cn[1:3]) # the first 3, so we permit to drop the 4th
(therefore_drop <- setdiff(drop_by_grep,except_not)) # the 4th 
(therefore_keep <- setdiff(cn,therefore_drop)) # everything but the 4th
© www.soinside.com 2019 - 2024. All rights reserved.