2017-01-04 2 views
-1

Я хотел бы объединить два ряда на основе индивидуальных имен в колонке 1.
Исходный файл выглядит следующим образом:Объединение двух строк в R

animal pnt step segments V5 V6 V7 V8 V9 V10 
337 1 3  660 1 1 1 1 65 1 
337 2 3  660 220 118 223 182 217 205 
420 1 3  660 41 35 71 11 13 36 
420 2 3  660 2 31 19 46 2 2 
339 1 3  660 1 1 1 3 65 1 
339 2 3  660 3 3 3 50 3 3 
341 1 3  660 4 4 4 4 4 4 
341 2 3  660 15 85 62 77 89 71 
347 1 3  660 90 62 56 12 14 15 
347 2 3  660 58 338 190 55 60 170  

А идея иметь что-то вроде:

animal V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 
337 1 220 1 118 1 223 1 182 65 217 1 205 
420 41 2 35 31 71 19 11 46 13 2 36 2  
339 1 3 1 3 1 3 3 50 65 3 1 3  
341 4 15 4 85 4 62 4 77 4 89 4 71 
347 90 58 62 338 56 190 12 55 14 60 15 170 

Любая помощь?
Спасибо!

+1

Может попробовать 'библиотека (data.table); setDT (df [- (2: 4)]) [, as.list (unlist (.SD)), by = animal] 'возможно –

+0

Похоже, что ваш код отлично работает. Спасибо! –

ответ

0

Другой вариант:

aggregate(df[,-(1:4)], list(animal=df[,1]), unlist) 
# animal V5.1 V5.2 V6.1 V6.2 V7.1 V7.2 V8.1 V8.2 V9.1 V9.2 V10.1 V10.2 
# 1 337 1 220 1 118 1 223 1 182 65 217  1 205 
# 2 339 1 3 1 3 1 3 3 50 65 3  1  3 
# 3 341 4 15 4 85 4 62 4 77 4 89  4 71 
# 4 347 90 58 62 338 56 190 12 55 14 60 15 170 
# 5 420 41 2 35 31 71 19 11 46 13 2 36  2 
+0

Когда я печатал с использованием 'out [1: 10,1: 10]', выглядит хорошо, но с помощью 'view (out)' не работает. После этого первого шага мой план состоит в следующем: 'table (melt (out, id.var =" animal ") [- 2])', и он не работает. Любое предположение? –

+0

Hm true, если часто забывают, что 'aggregate' ведет себя странно, возвращая более одного значения. В вашем случае я бы выполнил 'with (stack (lapply (split (df [, - (1: 4)], df [, 1]), unlist)), table (ind, values))'. – lukeA

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