R: как применить сложную функцию к каждому столбцу в фрейме данных, чтобы выложить новый фрейм данных для каждого столбца? - PullRequest
0 голосов
/ 01 июля 2019

Я прочитал несколько постов, но пока ни один из них не решает мои проблемы.Вот что я пытаюсь сделать:

Мои входные данные: у меня есть этот фрейм данных, в котором все строки являются продуктами, все столбцы являются стандартами, с которыми сравнивается продукт. Цель состоит в том, чтобы взглянуть на проход/ число отказов каждого стандарта, и посмотрите, какой из них прошел больше всего, и какой стандарт является единственным из всех продуктов, которые трудно встретить.

(кажется, что я не могу скопировать вставить таблицу здесь, поэтому явведите ниже, как выглядит фрейм данных)

**Source** **sample_ID** **Standard_a** **Standard_amn** **Standard_df**
Product1       1              Yes                Yes               NA
Product1       2              Yes                NO                Yes
...            ...            Yes                Yes               NA
Product1       10             Yes                Yes               NO
Product2       1              Yes                NO                YES
...            ...            ..                ....               ...
Product2       8              Yes                Yes               Yes
Product3       1              Yes                NA                NA
....                          Yes                Yes               YES
  • Есть некоторые правила отбора образцов продуктов и допустимые записи для ввода в столбец (Да означает пройти стандарт, нет значит нет, NA означает нетдоступны и т. д.).Я создал функцию, чтобы позаботиться об этом.
  • Но моя борьба заключается в том, чтобы применить мою функцию ко всем столбцам.

Вот моя функция для одногостолбец (14-й столбец), который я пытаюсь сделать циклом или чем-то, что будет автоматически использоваться во всех столбцах

#take product info columns 1:3 and the 14th standard column: named um9d_f6, 
and create a clean dataframe of this column, I call it x

    x <- appeals_clean %>%
#select column um9d_f6, I use it's position here, which is 14
      select(1:3,14) %>% 
      #group by source (which is product)
      group_by(source) %>%
      #code NA and missing as 0: this are the specific coding rule for pass and fail
      mutate(convert_num = ifelse(um9d_f6 %in% c('YES','NO','AC'),1,0),
             cum_elig = cumsum(convert_num),
             max_cum_elig = max(cum_elig)) %>%
      #get rid of: 1.empty entries after max eligible is reached 2.not enough eligible files 3.after eligible files reach 10
      filter(!((max_cum_elig == cum_elig & um9d_f6 == '')|max_cum_elig <8|(max_cum_elig>10 & cum_elig >10)))


    # now with the clean data from column 14 (again, named um9d_f6, now I calculate the pass rate)
    y <- x %>%
      group_by(source) %>%
      summarise(um9d_f6_n_Pass = sum(um9d_f6 %in% c('YES','AC')),
                um9d_f6_Rate = n_Pass/10)

Выходной фрейм данных Y выглядит следующим образом:

**Source**  **um9d_f6_n_Pass** **um9d_f6_Rate**
Product1       10         100  
Product2      8             80
Product3      8            80
Product2       8          80
Product3       10           100

Моя проблема в том, как я могу использовать цикл или другие функции для получения этого итогового кадра данных для каждого из стандартных столбцов в кадре данных.Так что мне не нужно вручную настраивать положение столбца и его имя столбца каждый раз, когда я использую созданную мной функцию (существует около 60 стандартов, поэтому, надеюсь, мне не нужно делать это вручную) ...

Я пробовал циклы, но не выяснил 1. как обращаться к столбцу в функции для x и 2. как назвать новые столбцы в Y в соответствии с именем входного столбца. в конце концов я оставлю все эти новые выходные кадры данных Y, поэтому мне нужно, чтобы имена были отражены в именах столбцов источника.

Будем весьма благодарны за любые предложения / рекомендации!

спасибо

Лев

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...