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

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

У меня есть следующий набор данных:

MC <- c(rep("OS000348",8), rep("OS000361",13), rep("OS000375",5))
ASN <- c(rep(2,8), rep(3,5), rep(2,8), rep(3,5))
Dia <- c(870,"NA", 867.3, "NA", "NA", 890.3,"NA","NA",871.2,"NA",868.7,"NA",866.2, "NA",
"NA",851,"NA","NA",842,"NA","NA",880,860,851.8,"NA",841)

df <- data.frame(MC,ASN,Dia)

df

Я хочу найти для каждого MC значения минимального и максимального диаметра и расположить их в итоговой таблице, как показано ниже:

MC          Dia     Min_Dia Max_Dia
OS000348    870     867.3   890.3
OS000361    871.2   841     871.2
OS000375    880     841     880

Я пытаюсь использовать пакет dplyr и следующее:

result1 <- 
  df %>% 
  group_by(MC) %>% 
  arrange(MC) %>%
  slice(c(1, n())) %>%
  mutate(minmax = c("Min", "Max")) %>%
  gather(var, val, Dia) %>%
  unite(key, minmax, var) %>%
  spread(key, val)

Но я не получаю таблицу так, как хочу (2-я таблица выше).

А есть альтернативы?

14.12.2016

  • Не вводите как "NA", вместо этого вводите как NA. Функция aggregate будет работать нормально: aggregate(Dia ~ MC, data = df, FUN = function(x) c(head(x,1), min(x, na.rm = T), max(x, na.rm = T))) 14.12.2016

Ответы:


1

Во-первых, вам нужно ввести NA как NA, а не "NA", иначе R считывает его как вектор символов, и вы не можете использовать функцию min(). Этот код дает желаемый результат:

MC <- c(rep("OS000348",8), rep("OS000361",13), rep("OS000375",5))
ASN <- c(rep(2,8), rep(3,5), rep(2,8), rep(3,5))
Dia <- c(870,NA, 867.3, NA, NA, 890.3,NA,NA,871.2,NA,868.7,NA,866.2, NA,
         NA,851,NA,NA,842,NA,NA,880,860,851.8,NA,841)

df <- data.frame(MC,ASN,Dia)

library(dplyr)

df <- df %>%
  group_by(MC) %>%
  mutate(minDia=min(Dia, na.rm=T), maxDia=max(Dia, na.rm=T))

И используйте это, если вы хотите сохранить только одно наблюдение MC:

df2 <- df %>%
  group_by(MC) %>%
  mutate(minDia=min(Dia, na.rm=T), maxDia=max(Dia, na.rm=T)) %>%
  ungroup() %>%
  distinct(MC, minDia, maxDia)
14.12.2016
  • спасибо за такой быстрый ответ. он показывает ошибку: "min" не имеет значения для факторов 14.12.2016
  • Это сообщение об ошибке не появится, если вы последуете совету @yoland в первом предложении. 14.12.2016
  • Убедитесь, что DIA - это числовой вектор. Если нет, используйте df$DIA <- as.numeric(df$DIA). И да, вопрос NA нужно решить раньше ;-) 14.12.2016
  • проверьте, df2 здесь только один столбец для MC, а не Min_Dia и Max_Dia 14.12.2016
  • в моих результатах 5 столбцов. вы запускали точный код? distinct() по определению удаляет только строки, а не столбцы, поэтому этого не должно происходить 14.12.2016
  • Я просто перепроверил ... во-первых, я получил df с 5 столбцами (и NAs), а во-вторых, я предполагал получить Distinct MC, но он вернул только 1 столбец в df2 с отдельным MC (т.е. OS000348, OS000361 OS000375) 14.12.2016
  • просто добавил distinct(MC, minDia, maxDia) ко второму ... заработало! 14.12.2016
  • благодарю вас! это все еще немного странно. Я помню, что у меня были проблемы с отдельными () и факторами. может быть, он делает что-то еще, чем я думаю? мне, вероятно, следует использовать unique (), пока я не выясню, что 15.12.2016
  • Новые материалы

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

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

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

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

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

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

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