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

случайным образом суммируйте значения из строк и назначьте их 2 столбцам в R

У меня есть data.frame с 8 столбцами. Одна предназначена для списка субъектов (одна строка на тему), а остальные 7 строк имеют оценку 1 или 0. Вот как выглядят данные:

>head(splitkscores)
  subject block3 block4 block5 block6 block7 block8 block9
1   40002      0      0      1      0      0      0      0
2   40002      0      0      1      0      0      1      1
3   40002      1      1      1      1      1      1      1
4   40002      1      1      0      0      0      1      0
5   40002      0      1      0      0      0      1      1
6   40002      0      1      1      0      1      1      1

Я хочу создать data.frame с 3 столбцами. Один столбец для предметов. В двух других столбцах должна быть сумма 3 или 4 случайно выбранных чисел из каждой строки моего data.frame (кроме темы), а в другом столбце должна быть сумма оставшихся значений, которые не были выбраны в первом случайный пример.

Помощь очень ценится. заранее спасибо

08.06.2012

  • Должна ли тема отличаться от строки к строке? 09.06.2012
  • И должен ли выбор из 3 или 4 столбцов быть одинаковым для каждой темы? 09.06.2012

Ответы:


1

Вот изящное и аккуратное решение, лишенное ненужной сложности (предположим, что ввод называется df):

chosen=sort(sample(setdiff(colnames(df),"subject"),sample(c(3,4),1)))
notchosen=setdiff(colnames(df),c("subject",chosen))
out=data.frame(subject=df$subject,
               sum1=apply(df[,chosen],1,sum),sum2=apply(df[,notchosen],1,sum))

Проще говоря: выборка из имен столбцов, отличных от «subject», выбор размера выборки 3 или 4 и наименование этих имен столбцов chosen; определите notchosen как другие столбцы (очевидно, исключая "тему"); затем верните фрейм данных со списком субъектов, суммой выбранных столбцов и суммой невыбранных столбцов. Выполнено.

08.06.2012
  • Я использовал ›selected = sort (sample (setdiff (colnames (splitkscores), subject), sample (c (3,4), 1)))› notchosen = setdiff (colnames (splitkscores), c (subject, selected)) ›Out = data.frame (subject = splitkscores $ subject, + sum1 = apply (splitkscores [, selected], 1, sum), sum2 = apply (splitkscores [, notchosen], 1, sum)) И, судя по всему, это сработало (при по крайней мере, теперь моя корреляция имеет больше смысла) Большое спасибо! 09.06.2012
  • насколько я могу судить, разница здесь в том, что мой код случайным образом выбирает 3 или 4 столбца для каждой строки, тогда как этот код последовательно использует 3 или 4 столбца, и это одни и те же столбцы для всей операции. 09.06.2012
  • Да, поскольку использование согласованного набора столбцов имеет гораздо больший математический и статистический смысл. Код также намного чище, imho, но тогда эти вещи немного субъективны :) 09.06.2012
  • Нет проблем, Эрнан, рад помочь :) 09.06.2012

  • 2

    Думаю, это сработает: [изменил способ считывания данных на основе другого ответа, потому что я сделал ошибку вручную ...]

       splitkscores <- read.table(text = "  subject block3 block4 block5 block6 block7 block8 block9
    1   40002      0      0      1      0      0      0      0
    2   40002      0      0      1      0      0      1      1
    3   40002      1      1      1      1      1      1      1
    4   40002      1      1      0      0      0      1      0
    5   40002      0      1      0      0      0      1      1
    6   40002      0      1      1      0      1      1      1", header = TRUE)
    
       df2 <- data.frame(subject = splitkscores$subject, sum3or4 = NA, leftover = NA)
       df2$sum3or4 <- apply(splitkscores[,2:ncol(splitkscores)], 1, function(x){
           sum(sample(x, sample(c(3,4),1), replace = FALSE))
         })
       df2$leftover <- rowSums(splitkscores[,2:ncol(splitkscores)]) - df2$sum3or4
    
       df2
         subject sum3or4 leftover
       1   40002       1        0
       2   40002       2        1
       3   40002       3        4
       4   40002       1        2
       5   40002       2        1
       6   40002       1        4
    
    08.06.2012
  • Большое спасибо за быстрый ответ. Я должен пояснить, что допустил ошибку при представлении исходного файла data.frame. Столбец для тем был указан неправильно, каждая строка этого столбца - отдельная тема, поэтому я не использовал первую часть вашего кода. Вторую часть вашего кода я немного изменил, чтобы включить столбцы от 2 до 8 вместо 2: 7, в котором оставался один столбец. Созданный data.frame - это действительно то, что я искал. Большое спасибо за вашу помощь и ваш элегантный код. 09.06.2012
  • Я не уверен в этом на 100%. Вы хотите, чтобы образец столбцов отличался строка за строкой? Думаю, нет (исходя из моих нынешних представлений о том, почему вы можете захотеть проделать такую ​​операцию). 09.06.2012
  • Например, sum3or4 больше для строки 5, чем для строки 6, чего никогда не произошло бы, если бы подмножество столбцов было выбрано один раз. Отдельный образец для каждой строки не кажется правильным (например, если вы пытаетесь сделать что-то типа bootstrappy). 09.06.2012
  • да, я изменил 7 на ncol(splitkscores), чтобы сделать его более гибким. Семерка возникла из-за моей первоначальной неряшливой ручной отметки splitkscores. рад, что это было полезно 09.06.2012
  • Я делаю это, чтобы сделать половину корреляции метода подсчета очков. 1 и 0 были баллами, присвоенными каждому предмету на основе формулы. Сейчас я подсчитывал баллы по каждому предмету для двух половин данных и смотрел, коррелированы ли они, что показало бы внутреннюю согласованность. Значение r оказалось неожиданно низким, что заставляет меня думать, что код, который я изначально использовал из этого примера, был не совсем правильным (очевидно, моя вина). Я использовал код, предоставленный Тимом П. в другом ответе, и я думаю, что это сработало. Пожалуйста, см. Мой комментарий в ответе Тима П. для моего окончательного решения. Большое спасибо 09.06.2012
  • Новые материалы

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

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

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

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

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

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

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