Как установить подкадр данных на основе нескольких переменных в R - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть датафрейм из 286 столбцов и 157355 строк. Я хочу поднастроить строки, которые содержат одну или несколько из нескольких определенных факторных переменных, таких как F32, F341 и т. Д. Как только это будет завершено, я хочу определить, какие другие факторные переменные являются наиболее распространенными в строках подмножества.

Я попытался отфильтровать интересующие значения, но появляется сообщение об ошибке, в котором говорится, что данные должны быть числовыми, логическими или сложными, например;

d<- a %>%
  filter_at(vars(f.41202.0.0:f.41202.0.65), all_vars('F32'))

Я также пробовал это сделать, но в результирующем кадре данных не было значений;

f <- a %>%
  rowwise() %>%
  filter(any(c(1:280) %in% c('F32', 'F320', 'F321', 'F322', 'F323', 
                             'F328', 'F329', 'F330', 'F331', 'F332', 
                             'F333', 'F334', 'F338', 'F339')))

то же самое произошло, когда я пытался поместить все соответствующие переменные в объект ICD;

f <- b %>%
  rowwise() %>%
  filter(any(c(1:286) %in% ICD))

Буду очень признателен за любые предложения, спасибо

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

Row.name Var1 Var2 Var3 Var4

1 F3 NA NA M87

2 нет данных NA M87 нет данных

3 нет данных F3 нет данных K17

4 нет данных NA F3 M87

После подстановки строк на основе F3 это должно выглядеть следующим образом;

Row.name Var1 Var2 Var3 Var4

1 F3 нет данных NA M87

3 нет данных F3 нет данных K17

4 нет данных NA F3 M87

, поэтому те же переменные столбцы сохраняются, но строки без F3 удаляются

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

наиболее распространенным: M87

2-е место по распространенности: K17

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

спасибоза помощь

1 Ответ

0 голосов
/ 01 ноября 2019

Если вы хотите использовать tidyverse, вы можете использовать filter_all, чтобы просмотреть все столбцы. Затем проверьте, есть ли any_vars в векторе диагностических кодов. В моем примере я смотрю на F3 и F320.

Впоследствии, если вы хотите подсчитать количество кодов диагностики, вы можете изменить свои данные с широкого на длинный, а затем подсчитать частоты. При желании вы можете удалить NA по фильтру. Дайте мне знать, если вы это имели в виду.

df <- data.frame(
  Var1 = c("F3", NA, NA, NA),
  Var2 = c(NA, NA, "F3", NA),
  Var3 = c(NA, "M87", NA, "F3"),
  Var4 = c("M87", NA, "K17", "M87")
)

library(tidyverse)

df %>%
  filter_all(any_vars(. %in% c("F3", "F320"))) %>%
  pivot_longer(cols = starts_with("Var"), names_to = "Var", values_to = "Code") %>%
  filter(!is.na(Code)) %>%
  count(Code, sort = TRUE)

После фильтра вы должны иметь:

  Var1 Var2 Var3 Var4
1   F3 <NA> <NA>  M87
2 <NA>   F3 <NA>  K17
3 <NA> <NA>   F3  M87

После pivot_longer и count:

# A tibble: 3 x 2
  Code      n
  <fct> <int>
1 F3        3
2 M87       2
3 K17       1

Примечание: если вы хотите фильтровать только по некоторым вашим переменным (вместо выбора всех переменных), вы можете использовать filter_at вместо этого, например:

filter_at(vars(starts_with("Var")), any_vars(. %in% c("F3", "F320")))
...