Я прочитал несколько постов, но пока ни один из них не решает мои проблемы.Вот что я пытаюсь сделать:
Мои входные данные: у меня есть этот фрейм данных, в котором все строки являются продуктами, все столбцы являются стандартами, с которыми сравнивается продукт. Цель состоит в том, чтобы взглянуть на проход/ число отказов каждого стандарта, и посмотрите, какой из них прошел больше всего, и какой стандарт является единственным из всех продуктов, которые трудно встретить.
(кажется, что я не могу скопировать вставить таблицу здесь, поэтому явведите ниже, как выглядит фрейм данных)
**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, поэтому мне нужно, чтобы имена были отражены в именах столбцов источника.
Будем весьма благодарны за любые предложения / рекомендации!
спасибо
Лев