我有几个具有相同列的数据框,我想以这样的方式组合它们,以识别它们来自哪个数据帧。例如,如果在数据帧#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。我正在使用字符串来识别我的数据帧,但我只是在这里使用数字来使示例更简单。
答案 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)
或者像这样?:
假设df1
和df2
分别是您的数据框1和2:
data.frame(frame=rep(1:2,lapply(list(df1,df2),function(x) dim(x)[1])),rbind(df1,df2))
答案 3 :(得分:0)
这可以通过cbind
和rbind
完成:
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)
如果有多个名为df1
,df2
等的数据集
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