Строки в столбцы в R на основе нескольких критериев со сводной статистикой - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть данные в этом формате:

ID        Cue       trial     time     accuracy
A         apple     copy      1450     1 
A         dog       copy      2154     1
A         apple     test1     2121     0
A         dog       test2     0        1
A         apple     final     1231     0
A         dog       final     5411     1

Мне нужно преобразовать его так, чтобы он выглядел следующим образом:

 ID        Cue       trial     time     accuracy     ID2       Cue2     trial2     time2       accuracy2      ID3       Cue3     trial3     time3       accuracy3
 A         apple     copy      1450     1            A         apple    test1      2121        0              A         apple    final      1231        0 

Задача № 1:

Мне нужно добавить каждую строку данных (из длинного формата) в конец другой строки (в широкоформатный формат) на основе совпадающего идентификатора и Cue (например, поместить все данные для Участника A с сигналом «apple» на одна строка ).

Задача № 2:

Количество строк НЕ является четным. Учитывая, что мне нужно четное количество столбцов, чтобы мои анализы работали, я только хочу переместить элементы, которые являются "test1" или "test2", если точность = 1.

Задача № 3:

Мне нужно выполнить итоговую статистику (количество / сумма) для строк, которые я не добавляю в конец первой строки. По сути, мне нужно знать количество испытаний, которые имеют «test1» или «test2» для каждой комбинации ID и cue (в этом случае у яблока было только 1 испытание test1 и 1 испытание test2) и поместить это в столбец где-нибудь.

Короче говоря, мне нужно нечто концептуально подобное:

A - apple --> row1 -- row2 -- row3 [summary statistics for # rows test1]
A - dog   --> row1 -- row2 -- row3 [summary statistics for # rows test2]

У меня была формула, которая, как мне кажется, считала итоговую статистику

dfsummary <- df %>%
   group_by(ID, trial, cue) %>%
   summarise(numRows = length(trial))

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

Спасибо за любые идеи!

1 Ответ

0 голосов
/ 09 ноября 2018

Мы создаем столбец последовательности по 'ID' 'Cue', а затем dcast

library(data.table)
out <- dcast(setDT(df1), ID + Cue ~ rowid(ID, Cue), 
      value.var = c("ID", "Cue", "trial", "time", "accuracy"))[,-(1:2)]

, а затем order столбцы

setcolorder(out, order(as.numeric(sub(".*_", "", names(out)))))

при необходимости измените имена столбцов

setnames(out, make.unique(sub("[._].*", "", names(out))))
out
#    ID   Cue trial time accuracy ID.1 Cue.1 trial.1 time.1 accuracy.1 ID.2 Cue.2 trial.2 time.2 accuracy.2
#1:  A apple  copy 1450        1    A apple   test1   2121          0    A apple   final   1231          0
#2:  A   dog  copy 2154        1    A   dog   test2      0          1    A   dog   final   5411          1

данные

df1 <- structure(list(ID = c("A", "A", "A", "A", "A", "A"), Cue = c("apple", 
"dog", "apple", "dog", "apple", "dog"), trial = c("copy", "copy", 
"test1", "test2", "final", "final"), time = c(1450L, 2154L, 2121L, 
0L, 1231L, 5411L), accuracy = c(1L, 1L, 0L, 1L, 0L, 1L)), 
class = "data.frame", row.names = c(NA, -6L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...