извлекать имена столбцов с указанным шаблоном c в data.table в R - PullRequest
0 голосов
/ 27 мая 2020

У меня есть очень большая таблица данных, которую я хочу суммировать по группам. Для обобщения я использую data.table и .SD. Проблема в том, что мне нужно назвать столбцы, которые я хочу обобщить, и это не всегда одно и то же. В зависимости от входящих данных, иногда у меня больше столбцов, а иногда меньше. Хорошо то, что интересующие меня столбцы всегда имеют один и тот же формат, а именно: f<X>_<Y>, m<X>_<Y>, f<X>, m<X>.

это список всех возможных имен столбцов:

ageColsPossible <- c("m0_9", "m10_19", "m20_29", "m30_39", "m40_49", "m50_59", "m60_69",
                   "f0_9", "f10_19", "f20_29", "f30_39", "f40_49", "f50_59", "f60_69") 

если данных недостаточно, моя таблица data.table будет содержать только некоторые из этих столбцов. Я хотел бы получить вектор с именами столбцов, которые доступны в данных:

>   names(myData)
 [1] "clientID"             "policyID"             "startYear"            "product"              "NOplans"              "grp"                 
 [7] "policyid"             "personid"             "age"                  "gender"               "dependant"            "location"            
[13] "region"               "exposure"             "startMonth"           "cover_effective_date" "endexposuredate"      "fromdate"            
[19] "enddate"              "planHistSufficiency"  "productRank"          "claim10month"         "claim11month"         "claim12month"        
[25] "claim9month"          "NA20_29"              "NA30_39"              "NA40_49"              "NA50_59"              "f0_9"                
[31] "f10_19"               "f20_29"               "f30_39"               "f40_49"               "f50_59"               "f60_69"              
[37] "m0_9"                 "m10_19"               "m20_29"               "m30_39"               "m40_49"               "m50_59"              
[43] "m60_69"               "u0_9"                 "u10_19"               "u20_29"               "u30_39"               "u40_49"              
[49] "u50_59"               "u60_69"               "uNA" 

Я знаю regrex и думал что-то в этой строке: regex = "(m|f)(\\d+)_?(\\d+)?", но у меня есть также где-то видел функцию patern(). К сожалению, я больше не могу его найти.

есть идеи?

1 Ответ

0 голосов
/ 27 мая 2020

что-то вроде этого, скорее всего, поможет ... если вам нужна только одна сводная функция? (median() в этом примере) ...

DT[, lapply( .SD, median), by=.(group), .SDcols = patterns( "^[mf]\\d+" ) ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...