我有一个包含这样的 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
。
我没有你的数据,所以我将使用简单的虹膜框架 您可以通过计算名称来决定丢弃什么和保留什么 并对它们进行集合操作;例如
(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