Как выбрать определенные c столбцы из большого количества данных в r - PullRequest
0 голосов
/ 20 февраля 2020

Я обрабатываю 303 фрейма данных, и каждый фрейм данных имеет разные имена, а также содержит разные столбцы. То, что я хочу, это выбрать определенные c столбцы, имена которых содержат "_CD" и "_NM" из этих множества фреймов данных. Есть ли хороший способ справиться с этим?

Обратите внимание, эти кадры данных не были перечислены.

Вот пример (я не могу вывести реальные данные, но покажу вам подделку с аналогичным форматом)

имя таблицы 1: AD_ITEM_CNT;

  • столбцы: CKND_CLSF_CD, SUBJ_CD, ITEM_CNT, UPDT_DT

имя таблицы 2: BLAD_PE_XEXM

  • столбцы: PT_SBST_NO, CEXM_NM, CEXM_CD, CEXM_NT, CEXM_RT_RF_RF_RF_NR_RF 1018 * имя таблицы 3: BLAD_MR_HLTH
    • столбцы: PT_SBST_NO, RGST_DT, EDU_DGRE_CD, DRNK_YN, JOB_KIND_CD ...

    Целью этого процесса является создание таблицы, подобной ниже

    Table          |       column |  CD 
    -----------------------------------
    AD_ITEM_CNT    | CKND_CLSF_CD |  01
    AD_ITEM_CNT    | CKND_CLSF_CD |  02
    AD_ITEM_CNT    | CKND_CLSF_CD |  03
    AD_ITEM_CNT    | CKND_CLSF_CD |  04
    BLAD_PE_XEXM   | CEXM_CD      |  AVS
    BLAD_PE_XEXM   | CEXM_CD      |  ABE
    BLAD_PE_XEXM   | CEXM_CD      |  CVS
    BLAD_PE_XEXM   | CEXM_CD      |  UVS
    

1 Ответ

0 голосов
/ 20 февраля 2020

Как сказал @ r2evans, я более чем рекомендую вам начать с загрузки всех ваших data.frame s в один list. Однако, если у вас нет другой опции, вы можете сделать это:

Сначала давайте создадим 5 data.frame s:

for (i in 1:5) { 

  set.seed(123)
  assign(paste0("y",i), data.frame(A_CD = rnorm(1), 
                                   A_NM = rnorm(1), 
                                   A_GK = rnorm(1)))

}

Далее мы можем создать список все наши переменные (используя ls()) и фильтр (Filter) только для data.frames:

dfs <- Filter(function(x) is(x, "data.frame"), mget(ls()))

Наконец, мы можем отфильтровать data.frame внутри списка для необходимых столбцов (в них есть CD и NM):

dfs <- lapply(dfs, function(x) x[, grepl("CD|NM", names(x)), drop=FALSE])

Вывод:

dfs

$y1
        A_CD       A_NM
1 -0.5604756 -0.2301775

$y2
        A_CD       A_NM
1 -0.5604756 -0.2301775

$y3
        A_CD       A_NM
1 -0.5604756 -0.2301775

$y4
        A_CD       A_NM
1 -0.5604756 -0.2301775

$y5
        A_CD       A_NM
1 -0.5604756 -0.2301775
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...