2013-08-28 2 views
0

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

Num condition  y 
1 a 1 
2 a 2 
3 a 3 
4 b 4 
5 b 5 
6 b 6 
7 c 7 
8 c 8 
9 c 9 
10 b 10 
11 b 11 
12 b 12 

Теперь я хочу сделать расчет (например, среднее) на b, в зависимости от того, было ли значение в строке до b, в этом примере a или c? Спасибо за любую помощь !!! Angelika

+0

Чтобы сделать это проще чтобы помочь вам, можете ли вы добавить пример ожидаемого результата. Если значение, предшествующее «b», определяет, выполняется ли вообще расчет? Или вы хотите выполнять разные вычисления? Пожалуйста, будьте более конкретными. – Henrik

+0

Привет, Хенрик, большое спасибо за ответ! Мне нужно будет произвести вычисления значений y по всем b, которым предшествует a или c, поэтому сумма b, предшествующая b, например, (15) или сумма b, которым предшествует c (33). Большое спасибо!!! – Angelika

ответ

1

Это то, что вы хотите?

# in order to separate between different runs of condition 'b', 
# get length and value of runs of equal values of 'condition' 
rl <- rle(x = df$condition) 
df$run <- rep(x = seq_len(length(rl$lengths)), times = rl$lengths) 

# calculate sum of y, on data grouped by condition and run, and where condition is 'b' 
aggregate(y ~ condition + run, data = df, subset = condition == "b", sum) 
+0

Привет, Хенрик, большое спасибо за ваш ответ. Оно работает! Но в случае моих данных, дело обстоит еще сложнее - данные выглядит как это: Num \t Состояние \t Gaze_time \t AOI_Hit в в б б \t с 10 \t б 9 4444296 +55606972687090228888 б б б 1 Теперь я хочу сделать расчеты по Gaze_Time, в зависимости от того, AOI_Hit является 0 или 1 - но и separeted depeding, если "б" предшествует «a» или «c». Надеюсь, это понятно ... Спасибо большое! – Angelika

0

Вы можете добавить "лагом" Состояние столбец в dataframe (предполагающей DF) с использованием

> DF <- within(DF, lag_cond <- c(NA, head(as.character(condition), -1))) 

Результат:

Num condition y lag_cond 
    1   a 1  <NA> 
    2   a 2  a 
    3   a 3  a 
    4   b 4  a 
    5   b 5  b 
    6   b 6  b 
    7   c 7  b 
    8   c 8  c 
    9   c 9  c 
    10   b 10  c 
    11   b 11  b 
    12   b 12  b 

Теперь вы можете определить строки, которые вы хотите, как это:

> DF[with(DF, condition=="b" & lag_cond %in% c("a","c")),] 
    Num condition y lag_cond 
    4   b 4  a 
    10   b 10  c 
+0

Привет, Фердинанд.крафт, спасибо за ответ. Однако в моем наборе данных это не сработает, так как его данные отслеживания глаз и между ними много НС. Кроме того, в этом примере всегда имеется столько же строк, что и в моих реальных данных – Angelika

Смежные вопросы