Nano Hash - криптовалюты, майнинг, программирование

Сохраняйте строки с определенными значениями во фрейме данных и удаляйте все остальные [R]

я использую Р

set.seed(1)
Data <- data.frame(id = seq(1, 10), 
               Diag1 = sample(c("A123", "B123", "C123"), 10, replace = TRUE), 
               Diag2 = sample(c("D123", "E123", "F123"), 10, replace = TRUE), 
               Diag3 = sample(c("G123", "H123", "I123"), 10, replace = TRUE), 
               Diag4 = sample(c("A123", "B123", "C123"), 10, replace = TRUE), 
               Diag5 = sample(c("J123", "K123", "L123"), 10, replace = TRUE), 
               Diag6 = sample(c("M123", "N123", "O123"), 10, replace = TRUE), 
               Diag7 = sample(c("P123", "Q123", "R123"), 10, replace = TRUE))
Data

У меня есть такой фрейм данных. На самом деле он имеет 34 переменных и 1,5 млн наблюдений. Это фрейм данных с данными пациента. (ID и диагнозы (ICD10) A123 и B123 обозначают определенные диагнозы. Я хочу извлечь всех пациентов с этими диагнозами. На самом деле я ищу 6 диагнозов в пределах сотен различных диагнозов ICD10. Каждый из тех диагнозов, которые я ищу, может быть появляются в любом столбце, но они взаимоисключающие.В конце концов у меня будет кадр данных около 4000 наблюдений вместо 1,5 млн.

Моя цель - получить фрейм данных, в котором я просто сохраняю строки, содержащие A123 или B123. A123 и B123 не могут находиться в одной строке. Но они могут появиться в каждом столбце.

Мне удается сделать это для одной единственной переменной, когда я делаю это:

DataA123 <- Data[Data$Diag1 == "A123", ]

Но я хочу сделать это для каждой переменной и для A123 и B123 (на самом деле таких факторов 6) вместе.

Это возможно?

14.09.2013

  • Какой язык или фреймворк вы используете? 14.09.2013
  • Я использую R. Извините, я новичок на этом форуме и в этом деле. Я искал на форумах и не смог найти ответ на этот вопрос. 14.09.2013
  • Добро пожаловать в СО. Вы имеете в виду, что вам нужна известность данных, где все переменные имеют A123 или все переменные имеют B123? Можете ли вы предоставить ожидаемый результат? 14.09.2013
  • Благодарю вас! Это фрейм данных с данными пациента. (ID и диагнозы (ICD10) A123 и B123 обозначают определенные диагнозы. Я хочу извлечь всех пациентов с этими диагнозами. На самом деле я ищу 6 диагнозов в пределах сотен различных диагнозов ICD10. Каждый из тех диагнозов, которые я ищу, может быть в любом столбце, но они взаимоисключающие.В конце концов у меня будет кадр данных около 4000 наблюдений вместо 1,5 млн. 14.09.2013
  • Итак, вы ищете пациентов, у которых Diag1=A123, Diag2=123, Diag3=A123, Diag4=A123, Diag5=A123 или Diag6=123 (предположим, что они взаимоисключающие, как вы сказали), верно? 14.09.2013
  • @ Metrics Exactly или B123 вместо A123. 14.09.2013
  • Понял. Смотрите ответы. 14.09.2013
  • @Roccer, полезно использовать set.seed при публикации вопросов такого типа, которые включают случайные данные. 14.09.2013
  • @ Анандо Махто, ты прав. Спасибо. Я только что обновил это 14.09.2013
  • @Roccer, отлично. Теперь, когда мы все работаем с одним и тем же небольшим набором выборочных данных, было бы неплохо, если бы вы могли поделиться желаемым результатом этих выборочных данных. 14.09.2013
  • @ Ананда Махто. Я попробовал ваше решение. Я изменил его так, как я ищу 6 диагнозов. Это тоже сработает? Мой вывод представляет собой data.frame, полный NA Data2[rowSums(cbind(rowSums(Data2 == G820), rowSums(Data2 == G821), rowSums(Data2 == G822), rowSums(Data2 == G823), rowSums( Data2 == G824), rowSums(Data2 == G825)) != 0) == 1, ] 14.09.2013
  • @Roccer, просто взгляните на ваш код, он должен работать. Кстати, если вы продолжите ставить пробел между @ и именем пользователя, они не получат никакого уведомления о том, что вы отправили им сообщение. 14.09.2013
  • @Roccer, для устранения неполадок вы можете разбить код на части и посмотреть, что он делает на каждом этапе. 14.09.2013
  • @ Анада Махто Спасибо за подсказку. Вау, ребята, вы быстрые. Я только что понял, что мой пример не годится, так как в одной строке может быть только один из диагнозов, чего в моем примере нет. 14.09.2013

Ответы:


1

Как насчет этого?

Выберите все строки с A123 и/или B123:

Data[apply(Data,1,function(x) {any(c("A123", "B123") %in% x)}),]

Выберите все строки с A123 или B123:

Data[apply(Data,1,function(x) {Reduce(xor, c("A123", "B123") %in% x)}),]
14.09.2013
  • +1 за эти альтернативы. Оба варианта, на мой взгляд, несколько совпадают с тем, что может искать ОП. Конечно, только они знают, что это такое! :п 14.09.2013
  • Большой! Это именно то, что я искал! Большое спасибо. 15.09.2013
  • @AnandaMahto, спасибо за помощь! Следующие вопросы будут лучше структурированы :) 15.09.2013
  • Не за что. Не забудьте принять ответ;) 15.09.2013

  • 2
    set.seed(1)
    
      ll<-as.list(names(Data)[-1])
    

    Для А123:

    Map(function(x) Data[Data[x][[1]]=="A123",],ll)
    
    
      [[1]]
       id Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    1   1  A123  D123  I123  B123  L123  N123  R123
    5   5  A123  F123  G123  C123  K123  M123  Q123
    10 10  A123  F123  H123  B123  L123  N123  R123
    
    [[2]]
    [1] id    Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    <0 rows> (or 0-length row.names)
    
    [[3]]
    [1] id    Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    <0 rows> (or 0-length row.names)
    
    [[4]]
      id Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    4  4  C123  E123  G123  A123  K123  M123  P123
    8  8  B123  F123  H123  A123  K123  N123  R123
    
    [[5]]
    [1] id    Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    <0 rows> (or 0-length row.names)
    
    [[6]]
    [1] id    Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    <0 rows> (or 0-length row.names)
    
    [[7]]
    [1] id    Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    <0 rows> (or 0-length row.names)
    

    Для B123:

    Map(function(x) Data[Data[x][[1]]=="B123",],ll)
    
    
    
     [[1]]
      id Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    2  2  B123  D123  G123  B123  K123  O123  P123
    3  3  B123  F123  H123  B123  L123  N123  Q123
    8  8  B123  F123  H123  A123  K123  N123  R123
    9  9  B123  E123  I123  C123  L123  N123  P123
    
    [[2]]
    [1] id    Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    <0 rows> (or 0-length row.names)
    
    [[3]]
    [1] id    Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    <0 rows> (or 0-length row.names)
    
    [[4]]
       id Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    1   1  A123  D123  I123  B123  L123  N123  R123
    2   2  B123  D123  G123  B123  K123  O123  P123
    3   3  B123  F123  H123  B123  L123  N123  Q123
    10 10  A123  F123  H123  B123  L123  N123  R123
    
    [[5]]
    [1] id    Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    <0 rows> (or 0-length row.names)
    
    [[6]]
    [1] id    Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    <0 rows> (or 0-length row.names)
    
    [[7]]
    [1] id    Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    <0 rows> (or 0-length row.names)
    

    Для A123 или B123:

     Map(function(x) Data[Data[x][[1]]=="A123"|Data[x][[1]]=="B123",],ll)
    
    
    
     [[1]]
       id Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    1   1  A123  D123  I123  B123  L123  N123  R123
    2   2  B123  D123  G123  B123  K123  O123  P123
    3   3  B123  F123  H123  B123  L123  N123  Q123
    5   5  A123  F123  G123  C123  K123  M123  Q123
    8   8  B123  F123  H123  A123  K123  N123  R123
    9   9  B123  E123  I123  C123  L123  N123  P123
    10 10  A123  F123  H123  B123  L123  N123  R123
    
    [[2]]
    [1] id    Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    <0 rows> (or 0-length row.names)
    
    [[3]]
    [1] id    Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    <0 rows> (or 0-length row.names)
    
    [[4]]
       id Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    1   1  A123  D123  I123  B123  L123  N123  R123
    2   2  B123  D123  G123  B123  K123  O123  P123
    3   3  B123  F123  H123  B123  L123  N123  Q123
    4   4  C123  E123  G123  A123  K123  M123  P123
    8   8  B123  F123  H123  A123  K123  N123  R123
    10 10  A123  F123  H123  B123  L123  N123  R123
    
    [[5]]
    [1] id    Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    <0 rows> (or 0-length row.names)
    
    [[6]]
    [1] id    Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    <0 rows> (or 0-length row.names)
    
    [[7]]
    [1] id    Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    <0 rows> (or 0-length row.names)
    
    14.09.2013

    3

    Если я правильно понял ваш вопрос, вы можете использовать что-то вроде:

    Data[rowSums(cbind(rowSums(Data == "A123"), 
                       rowSums(Data == "B123")) != 0) == 1, ]
    

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


    Основная идея заключается в следующем:

    • rowSums(Data == "A123") говорит нам, сколько раз "A123" встречается в каждой строке.
    • rowSums(Data == "B123") говорит нам, сколько раз "B123" встречается в каждой строке.
    • cbind объединяет их вместе в виде матрицы из двух столбцов.
    • Поскольку «A123» и «B123» не могут находиться в одной строке, мы снова вычисляем rowSums, чтобы узнать, в скольких строках присутствует только один из них (даже если он присутствует более одного раза).
    • Оттуда это основное подмножество.

    Вот пример:

    set.seed(1)
    Data <- data.frame(id = seq(1, 10), 
                   Diag1 = sample(c("A123", "B123", "C123"), 10, replace = TRUE), 
                   Diag2 = sample(c("D123", "E123", "F123"), 10, replace = TRUE), 
                   Diag3 = sample(c("G123", "H123", "I123"), 10, replace = TRUE), 
                   Diag4 = sample(c("A123", "B123", "C123"), 10, replace = TRUE), 
                   Diag5 = sample(c("J123", "K123", "L123"), 10, replace = TRUE), 
                   Diag6 = sample(c("M123", "N123", "O123"), 10, replace = TRUE), 
                   Diag7 = sample(c("P123", "Q123", "R123"), 10, replace = TRUE))
    Data
    #    id Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    # 1   1  A123  D123  I123  B123  L123  N123  R123
    # 2   2  B123  D123  G123  B123  K123  O123  P123
    # 3   3  B123  F123  H123  B123  L123  N123  Q123
    # 4   4  C123  E123  G123  A123  K123  M123  P123
    # 5   5  A123  F123  G123  C123  K123  M123  Q123
    # 6   6  C123  E123  H123  C123  L123  M123  P123
    # 7   7  C123  F123  G123  C123  J123  M123  Q123
    # 8   8  B123  F123  H123  A123  K123  N123  R123
    # 9   9  B123  E123  I123  C123  L123  N123  P123
    # 10 10  A123  F123  H123  B123  L123  N123  R123
    
    Data[rowSums(cbind(rowSums(Data == "A123"), 
                       rowSums(Data == "B123")) != 0) == 1, ]
    #   id Diag1 Diag2 Diag3 Diag4 Diag5 Diag6 Diag7
    # 2  2  B123  D123  G123  B123  K123  O123  P123
    # 3  3  B123  F123  H123  B123  L123  N123  Q123
    # 4  4  C123  E123  G123  A123  K123  M123  P123
    # 5  5  A123  F123  G123  C123  K123  M123  Q123
    # 9  9  B123  E123  I123  C123  L123  N123  P123
    

    Обратите внимание, что из исходника 10-ряд data.frame

    • строки 1, 8 и 10 были удалены, так как они содержали оба "A123" и "B123".
    • строки 6 и 7 были удалены, так как они не содержали ни "A123", ни "B123".
    14.09.2013
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..