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

Агрегирование R по большому количеству столбцов без указания имен столбцов

Я не смог найти ответ на свой вопрос ни здесь, ни в Google.

У меня есть фрейм данных (ширина 500 столбцов, длина 200 000 строк) с несколькими строками на человека. Каждая ячейка (за исключением первого столбца с идентификатором человека) содержит 0 или 1. Я ищу способ уменьшить этот фрейм данных до 1 строки на человека, в котором я беру максимум для каждого столбца по человеку.

Я знаю, что могу использовать ddply или data.table... как показано ниже...

tt <-data.frame(person=c(1,1,1,2,2,2,3,3,3), col1=c(0,0,1,1,1,0,0,0,0),col2=c(1, 1, 0, 0, 0, 0, 1 ,0 ,1))

library(plyr)
ddply(tt, .(person), summarize, col1=max(col1), col2=max(col2))

  person col1 col2
      1    1    1
      2    1    0
      3    0    1

Но я не хочу указывать имена каждого из моих столбцов, потому что 1) у меня их 500 и 2) в новом наборе данных они могут быть другими.

22.04.2015

Ответы:


1

Используйте функцию summarise_each из dplyr

library(dplyr)
tt %>% group_by(person) %>% summarise_each(funs(max))

#   person col1 col2
# 1      1    1    1
# 2      2    1    0
# 3      3    0    1

или просто базовая функция aggregate

aggregate(.~person, tt, max)

#   person col1 col2
# 1      1    1    1
# 2      2    1    0
# 3      3    0    1
22.04.2015
  • Спасибо! Работает и достаточно быстро! 22.04.2015

  • 2

    Или используйте data.table.

    library(data.table)
    setDT(tt)[, lapply(.SD, max), person]
    #    person col1 col2
    #1:      1    1    1
    #2:      2    1    0
    #3:      3    0    1
    
    22.04.2015

    3

    Ниже приведена еще одна пробная версия, использующая только l(s)apply().

    t(sapply(unique(tt$person), function(x) lapply(tt[tt$person==x,], max)))
         person col1 col2
    [1,] 1      1    1   
    [2,] 2      1    0   
    [3,] 3      0    1  
    
    22.04.2015
    Новые материалы

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

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

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

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

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

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

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