2017-01-04 76 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)'不会。 经过这第一步,我的计划是做:'表(融化(出,id.var =“动物”)[ - 2])',它不工作。 任何猜测? –

+0

嗯,如果经常忘记'aggregate'在返回多个值时表现不佳。在你的情况下,我会''用(stack(lapply(split(df [, - (1:4)],df [,1]),unlist)),table(ind,values))''。 – lukeA