2016-01-06 70 views
1

我有一个列表,其中包含1到N个数据帧。 他们都有相同的列,我需要逐行连接它们。R绑定数据帧,同时添加列与列表ID

问题是,我需要添加一个新列以标识与每个原始数据框相关的新数据框的部分。

作为一个例子:

$ tracks :List of 1 
    ..$ :List of 2 
    .. ..$ 01-DEZ-15 11:57:34:'data.frame': 19 obs. of 5 variables: 
    .. .. ..$ lon  : num [1:19] -48.6 -48.6 -48.6 -48.6 -48.6 ... 
    .. .. ..$ lat  : num [1:19] -26.8 -26.8 -26.8 -26.8 -26.8 ... 
    .. .. ..$ ele  : chr [1:19] "14.56" "21.77" "14.56" "15.52" ... 
    .. .. ..$ time  : POSIXct[1:19], format: "2015-12-01 07:35:03" "2015-12-01 07:35:21" ... 
    .. .. ..$ extensions: chr [1:19] "0" "0" "0" "0" ... 
    .. ..$ NA    :'data.frame': 1899 obs. of 5 variables: 
    .. .. ..$ lon  : num [1:1899] -48.6 -48.6 -48.6 -48.6 -48.6 ... 
    .. .. ..$ lat  : num [1:1899] -26.8 -26.8 -26.8 -26.8 -26.8 ... 
    .. .. ..$ ele  : chr [1:1899] "14.08" "13.12" "13.12" "13.12" ... 
    .. .. ..$ time  : POSIXct[1:1899], format: "2015-12-01 07:39:43" "2015-12-01 07:39:53" ... 
    .. .. ..$ extensions: chr [1:1899] "0" "0" "0" "0" ... 

我需要两个列表合并为1个的数据帧,将所述列表的号码作为一个新列。

此类似:

 Lon   Lat Ele   Time   Ext ID 
1 -48.60467 -26.78866 14.56 2015-12-01 07:35:03 0 1 
2 -48.60467 -26.78868 21.77 2015-12-01 07:35:21 0 1 
3 -48.60468 -26.78869 14.56 2015-12-01 07:35:45 0 1 
4 -48.60468 -26.78869 15.52 2015-12-01 07:36:09 0 2 
5 -48.60468 -26.78872 13.12 2015-12-01 07:36:46 0 2 

将有可能有效地完成任务?

谢谢你的帮助。 此致敬礼。

回答

2

我通常使用这一个班轮:

tracks <- list(df1=iris, df2=iris) 
Z_both <- do.call(rbind, mapply(transform, tracks, ID=seq_along(tracks), SIMPLIFY = FALSE)) 

mapply(transform)将一列添加到每个data.frame,然后do.call(rbind)将它们堆叠。

+0

非常感谢您的快速和精确答案。它很容易解决我的问题队友。无法形容。我在R方面仍然是新手,我仍然在为一些简单的任务而努力。再次感谢您花时间帮助我。祝好友。 – aoceano

+0

@aoceano,Neal的回答很棒!但是你可能想考虑'dplyr :: bind_rows'而不是'do.call(rbind)'。 'dplyr :: bind_rows'和'dplyr :: bind_cols'都比它们的''do.call()'等价。我也认为他们为更可读的代码。 –

+0

Humm谢谢你的建议@Jacob H.我一定会做出改进。后来我会工作将会有大量的数据。祝好友。 – aoceano