组合R中的数据帧

时间:2014-07-09 01:09:00

标签: r

我有几个具有相同列的数据框,我想以这样的方式组合它们,以识别它们来自哪个数据帧。例如,如果在数据帧#1中,我有这样的数据:

  x y
1 a 1
2 b 4

在数据框#2中,我有这些数据:

  x y
1 d 6
2 e 7

我想将它们组合成一个数据框,其中包含一个新列,用于标识它们来自哪个数据框:

  frame x y
1     1 a 1
2     1 b 4
3     2 d 6
4     2 e 7

帧列标识行1和2来自数据帧#1,行3和4来自数据帧#2。我正在使用字符串来识别我的数据帧,但我只是在这里使用数字来使示例更简单。

5 个答案:

答案 0 :(得分:1)

使用与@Shambho相同的列表方法do.call

dfList <- list(
    df1 = data.frame(x=letters[1:2],y=1:2),
    df2 = data.frame(x=letters[3:4],y=3:4)
)


data.frame(
    frame = rep(seq_along(dfList), sapply(dfList, nrow)),
    do.call(rbind, dfList), row.names=NULL
)

##   frame x y
## 1     1 a 1
## 2     1 b 2
## 3     2 c 3
## 4     2 d 4

答案 1 :(得分:0)

假设您的数据框位于列表中,则以下内容应该有效:

dfList <- list(
  df1 = data.frame(x=letters[1:2],y=1:2),
  df2 = data.frame(x=letters[3:4],y=3:4)
  )

newDF <- data.frame()
for(i in 1:length(dfList)) {
  newDF <- rbind(newDF, cbind(frame=rep(i,length(dfList[[i]])),dfList[[i]]))
}
newDF

答案 2 :(得分:0)

或者像这样?:

假设df1df2分别是您的数据框1和2:

data.frame(frame=rep(1:2,lapply(list(df1,df2),function(x) dim(x)[1])),rbind(df1,df2))

答案 3 :(得分:0)

这可以通过cbindrbind完成:

rbind(cbind(frame=1, dat1), cbind(frame=2, dat2))
#    frame x y
# 1      1 a 1
# 2      1 b 4
# 11     2 d 6
# 21     2 e 7

答案 4 :(得分:0)

如果有多个名为df1df2等的数据集

library(plyr)
library(stringr)
Names <-ls(pattern="df")
ldply(setNames(mget(Names),str_extract(Names,"\\d+")))
 # .id x y
#1   1 a 1
#2   1 b 4
#3   2 d 6
#4   2 e 7