2014-09-16 2 views
0

Я подробно читал о выборе с условием, используя функцию, такую ​​как , совокупность или пакет pylr, но, похоже, для моего случая.Двойной предварительный выбор данных в r

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

Спасибо за любой совет.

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

time.stamp <- c(21.0,21.1,21.2,21.3,21.4) 
behavior <- c("close", "1", "close","1","close") 
event_type <- c("start","point","stop","point","start") 

example <- data.frame(time.stamp,behavior,event_type) 



    time.stamp behavior event_type 
1  21.0 close  start 
2  21.1  1  point 
3  21.2 close  stop 
4  21.3  1  point 
5  21.4 close  start 

Мое исследование вопрос: что число поведения == 1 во время поведения == Close.

К примеру, в этом случае ответ будет 1 Поскольку вторая 1 является после Close & Stop.

Среди других возможных решений я подумал о подмножестве по диапазону времени. Штампы, находящиеся между закрытием & Начало и закрытие & остановка, но я не знаю, как это сделать в коде.

Как я уже сказал, мне хотелось бы внести свой вклад в то, как думать о проблеме.

Большое спасибо, Надеюсь узнать что-то. Приветствия

+0

Да, число/кол-во случаев для какое поведение == 1, если предыдущее event_type == начало и начало «закрытия», а не другого возможного типа поведения, которое я не поставил, чтобы это было просто. Спасибо за внимание к пониманию. –

ответ

0

Я думаю, чтобы решить эту проблему, вам не нужны никакие специальные пакеты. Используя только 'базу':

length(which(example$behavior[which(example$behavior == 'close' & as.character(example$event_type) == 'stop')+1] == 1))

EDIT: После очистки, что требуется вывод, изменения в код:

sum((which(example$behavior == 'close' & as.character(example$event_type) == 'stop') - which(example$behavior == 'close' & as.character(example$event_type) == 'start')) - 1) 

Бест, Adii_

+0

Спасибо. Проблема с вашим предложением состоит в том, что часто у меня более одного (извините за каламбур). Вы предложили бы ввести цикл for для решения этой проблемы? –

+0

Я не уверен, что вы имеете в виду больше, чем на 1? –

+0

попробуйте код со следующим новым набором данных, и вы поймете 'time.stamp <- c (21.0,21.1,21.11,21.12,21.2,21.3,21.4,21.5) поведение <- c (" close "," 1 " «1», «1», «закрыть», «1», «закрыть», «закрыть») event_type <- c («start», «point», «point», «point», «point», «start», «stop») пример <- data.frame (time.stamp, behavior, event_type) ' –

0

Я бы сделать таким образом:

n = nrow(example) 
length(which(example$behavior[2:n]==1 & example$event_type[1:n-1]!= "stop")) 
+0

На самом деле он работает только в этом конкретном случае, потому что число строк равно 1, это не всегда '[1: n-1]! =« Stop ». Но спасибо так или иначе отправной точкой –

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