2016-07-06 4 views
1

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

Я хочу сделать новую колонку с сеансом номером моделирования для каждого пользователя

(ID) (Simulation Number) (Simulation-time-difference) (Session) 

A   1    0:00:00.00    1 
A   2    0:00:08.22    1 
A   3    0:00:20.67    2 
A   4    0:00:05.38    2 
B   5    0:00:00.00    1 
B   6    0:00:03.32    1 
B   7    0:00:28.45    2 

ответ

0

Вот один метод с использованием ave и cumsum после извлечения секунд:

# extract the seconds 
df$seconds <- as.numeric(gsub("^0:00:([0-9]{2}\\.[0-9]{2})", "\\1", df$V3)) 
# calculate the session number 
df$session <- ave((df$seconds > 20), df$V1, FUN=cumsum) + 1 

Это дает желаемый выход.

df 
    V1 V2   V3 seconds session 
1 A 1 0:00:00.00 0.00  1 
2 A 2 0:00:08.22 8.22  1 
3 A 3 0:00:20.67 20.67  2 
4 A 4 0:00:05.38 5.38  2 
5 B 5 0:00:00.00 0.00  1 
6 B 6 0:00:03.32 1 3.32  1 
7 B 7 0:00:28.45 2 28.45  2 

данные

df <- read.table(text=" A   1  0:00:00.00    
A   2    0:00:08.22    
A   3    0:00:20.67    
A   4    0:00:05.38    
B   5    0:00:00.00    
B   6    0:00:03.32 
B   7    0:00:28.45", as.is=TRUE) 
+0

большое спасибо – ionbera

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