2016-12-16 1 views
0

Вход:Совокупные как новый столбец в R

Time,id1,id2 
22:30,1,0 
22:32,2,1 
22:33,1,0 
22:34,2,1 

Выход Желаемая

Time,Time2,id1,id2 
22:30,22:33,1,0 
22:32,22:34,2,1 

Вывод мой код

Time,id1,id2 
22:30,22:33,1,0 
22:32,22:34,2,1 

Какие изменения нужно внести в мой код aggregate(Time~,df,FUN=toString) Мой id1 и id2 вместе - это ключ, а время - время и время для каждой клавиши. Мне нужно найти время и тайм-аут в виде отдельных значений столбца. В настоящее время они находятся в столбце Time.

Я попробовал это, используя awk.

+0

Невозможно использовать правильное форматирование из-за ограниченной подключение через 2g мобильный. Пожалуйста, не голосуйте – user1977867

+0

'aggregate (Time ~., Df, FUN = toString)' – Sotos

+0

@ Сото, что я уже использую – user1977867

ответ

0

Если вы не хотите использовать какие-либо пакеты, это будет работать:

df <- aggregate(Time~.,df,FUN=toString) 
df 
#output 
id1 id2   Time 
1 0 22:30, 22:33 
2 1 22:32, 22:34 

df$Time2 <- lapply(strsplit(as.character(df$Time), ","),"[", 2) 
df$Time <- lapply(strsplit(as.character(df$Time), ","),"[", 1) 
df 
#output 
id1 id2 Time Time2 
1 0 22:30 22:33 
2 1 22:32 22:34 
0

С awk

$ cat time.awk 
BEGIN { 
    FS = OFS = "," 
} 

function in_time() { 
    n++ 
    store[id1, id2] = n 
    itime[n] = time; iid1[n] = id1; iid2[n] = id2 
} 

function out_time( i) { 
    i = store[id1, id2] 
    otime[i] = time 
} 


NR > 1 { 
    time = $1; id1 = $2; id2 = $3 
    if ((id1, id2) in store) out_time() 
    else      in_time() 
} 

END { 
    print "Time,id1,id2" 
    for (i = 1; i <= n; i++) 
     print itime[i], otime[i], iid1[i], iid2[i] 
} 

Использование:

awk -f time.awk file.dat