WedX - журнал о программировании и компьютерных науках

DataTable Reformat

    d1=data.frame("Student"=c(1,1,1,2,2,2,3,3,4,4,4),
    "Score"=c(1,1,1,1,2,2,1,3,1,2,3),
    "Grade"=c(5,6,7,3,4,5,2,4,7,8,9),
    "Class"=c(1,1,1,1,1,1,2,2,1,1,1),
    "School"=c(100,100,100,100,100,100,92,92,81,81,81))


    d2=data.frame("Student"=c(1,2,3,4,5),
"Q1"=c(0,1,0,1),
    "VX"=c(0,0,1,1),
    "A"=c(5,3,2,7),
    "B"=c(7,3,4,7),
    "C"=c(7,4,4,8),
    "D"=c(7,5,4,9),
    "Class"=c(1,1,2,1),
    "School"=c(100,100,92,81))

У меня есть данные 'd1' и я хочу данные 'd2' с правилами:

Студент: Just Student from d1

Q1: если оценка из d1 когда-либо равнялась 2 для ученика из d1, это равняется 1. Если нет, это равно 0.

VX: если оценка из d1 когда-либо равнялась 3 для ученика из d1, это равняется 1. Если нет, это равно 0.

A: соответствует первой / минимальной оценке от d1 для студента

B: если оценка от d1 равняется 2, тогда ставьте оценку ТОЛЬКО ДО того, как это произошло. Если нет, то поставьте последнюю / максимальную оценку. Важно отметить, что первая оценка не может быть равна 2, поэтому не стоит беспокоиться о пропущенных данных.

C: если оценка от d1 равна 2, тогда ставьте оценку, когда это произошло. Если нет, то поставьте последнюю / максимальную оценку

D: если оценка от d1 равнялась 3, тогда ставьте оценку, когда это произошло. Если нет, то поставьте последнюю / максимальную оценку

Класс: Просто класс из d1

Школа: Just the School from d1

18.04.2020

Ответы:


1

В data.table мы можем это сделать. :

library(data.table)

setDT(d1)[,.(Q1 = as.integer(any(Score == 2)), 
        VX = as.integer(any(Score == 3)), 
         A = first(Grade), 
         B = if(any(Score == 2)) Grade[which.max(Score == 2) - 1] else max(Grade),
         C = if(any(Score == 2)) Grade[which.max(Score == 2)] else max(Grade),
         D = if(any(Score == 3)) Grade[which.max(Score == 3)] else max(Grade)), 
     .(Student, Class, School)]


#   Student Class School Q1 VX A B C D
#1:       1     1    100  0  0 5 7 7 7
#2:       2     1    100  1  0 3 3 4 5
#3:       3     2     92  0  1 2 4 4 4
#4:       4     1     81  1  1 7 7 8 9

Использование dplyr здесь может быть немного выгодным с точки зрения набора текста, поскольку мы можем ссылаться на ранее созданные столбцы Q1 и VX.

library(dplyr)

d1 %>%
  group_by(Student, Class, School) %>%
  summarise(Q1 = as.integer(any(Score == 2)), 
            VX = as.integer(any(Score == 3)), 
             A = first(Grade), 
             B = if(Q1) Grade[which.max(Score == 2) - 1] else max(Grade), 
             C = if(Q1) Grade[which.max(Score == 2)] else max(Grade), 
             D = if(VX) Grade[which.max(Score == 3)] else max(Grade))
19.04.2020
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]