2016-04-25 1 views
0

Я пытался определить способ сценария через R, но просто не могу его получить. У меня есть такой набор данных:Выберите определенные строки, основанные на предыдущем значении строки (в том же столбце)

Trial Type Correct Latency  
1  55 0  0 
3  30 1  766 
4  10 1  344 
6  40 1  716 
7  10 1  326 
9  30 1  550 
10  10 1  350 
11  64 0  0 
13  30 1  683 
14  10 1  270 
16  30 1  666 
17  10 1  297 
19  40 1  616 
20  10 1  315 
21  64 0  0 
23  40 1  850 
24  10 1  322 
26  30 1  566 
27  20 0  766 
28  40 1  500 
29  20 1  230 

, который идет намного дольше (около 1000 строк).

Из этого одного набора данных, я хотел бы создать 4 отдельных data.frames/таблицы можно экспортировать таблицы с, а также сделать мои собственные расчеты

Я хотел бы иметь data.frame (4 в общей сложности), по одному для каждого из этих точек пулевых:

  • типа 10 строк, которые предшествуют типа 30 строк
  • типа 10 строк, которые предшествуют типа 40 строк
  • типа 20 строк, которые предшествуют по типу 30, строка
  • типа 20 строк, которые предшествуют типа 40 строк

Я хотел бы для всех столбцов в соответствующих строках, которые будут помещены в эти новые таблицы, но только в том числе данные столбца типов строк 10 или 20 .

Например, первая таблица (тип 10 предшествует типа 30) хотели бы это на основе данных образца:

Trial Type Correct Latency  
    4  10  1  344 
    10  10  1  350 
    14  10  1  270 
    17  10  1  297 

Второй стол (тип 10 предшествует типа 40):

Trial Type Correct Latency  
    7  10  1  326 
    20  10  1  315 
    24  10  1  322 

Третий стол (тип 20 предшествует типа 30):

Trial Type Correct Latency  
    27  20  0  766 

Четвертый стол (таблица 20 предшествует типа 40):

Trial Type Correct Latency   
29  20  1  230 

Я могу подмножество просто отлично, чтобы получить одну таблицу только из строк типа 10, а другую для строк типа 20, но я не могу выяснить, как создавать разные таблицы для строк типа 10 и 20 на основе предыдущего значения типа. Кроме того, проблема заключается в том, что «Trials» не в порядке (пропускает числа).

Любая помощь была бы принята с благодарностью. Спасибо.

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

Четвертый стол (стол 20 предшествуют типа 40):

Trial Type Correct Latency   
28  40  1  500 
29  20  1  230 

ответ

0

для четвертого примера, вы можете использовать which() в сочетании с lag() из dplyr, чтобы достичь показателей, которые отвечают вашим критериям. Затем вы можете использовать их для подмножества data.frame.

# Get indices of rows that meet condition 
ind2 <- which(df$Type==20 & dplyr::lag(df$Type)==40) 
# Get indices of rows before the ones that meet condition 
ind1 <- which(df$Type==20 & dplyr::lag(df$Type)==40)-1 

# Subset data 
> df[c(ind1,ind2)] 
    Trial Type Correct Latency 
1: 28 40  1  500 
2: 29 20  1  230 
+0

Hi mtoto, я пробовал код, но я просто получаю пустой стол (только с заголовками столбцов). Любые предложения относительно того, что я могу делать неправильно? Спасибо. – pdhami

+0

Я понял проблему, нам нужно использовать 'lag()' из 'dplyr', а не из пакета' stats'. Ответ обновлен. – mtoto

+0

Вы также можете использовать его полностью в 'dplyr', используя' filter (df, Type == 10 & lag (Type) == 30) ' – User7598

0

Вот пример кода, если вы всегда хотите удалить первые испытания своих данных.

var1 <- c(1,2,1,2,1,2,1,2,1,2) 
var2 <- c(1,1,1,2,2,2,2,3,3,3) 

dat <- data.frame(var1, var2) 

var1 var2 
1  1 1 
2  2 1 
3  1 1 
4  2 2 
5  1 2 
6  2 2 
7  1 2 
8  2 3 
9  1 3 
10 2 3 

#delete only this line directly 
filter(dat,lag(var2)==var2) 

var1 var2 
1  1 1 
2  2 1 
3  1 1 
6  2 2 
7  1 2 
10 2 3 

#delete the first 2 trials 
#make a list of all rows where var2[n-1]!=var2[n] --> using lag from dplyr 
drops <- c(1,2,which(lag(dat$var2)!=dat$var2), which(lag(dat$var2)!=dat$var2)+1) 
if (!identical(drops,numeric(0))) { dat <- dat[-drops,] } 

var1 var2 
3  1 1 
6  2 2 
7  1 2 
10 2 3 
Смежные вопросы