当rbind
多个数据帧时,我想指出以前的数据帧的起始位置。所以在使用时:
df1<-data.frame(c(1,2,3,4),rnorm(1:4),rnorm(1:4),rnorm(1:4))
df2<-data.frame(c(1,2,3,4),rnorm(1:4),rnorm(1:4),rnorm(1:4))
dfTotal<-rbind(df1,df2)
我希望有一个指标,其中df2已在dfTotal中启动。
两个问题:
答案 0 :(得分:3)
我们可以将rbindlist
与idcol
参数
library(data.table)
rbindlist(list(df1,df2), idcol='grp')
如果有多个数据集带有模式&#39; df&#39;接下来是数字,我们可以使用mget
和paste
来获取“list
rbindlist(mget(paste0("df", 1:2)), idcol = "grp")
或使用bind_rows
dplyr
library(dplyr)
bind_rows(df1, df2, .id='grp')
或者我们可以以紧凑的方式使用base R
do.call(rbind, Map(cbind, ind = 1:2, mget(paste0("df", 1:2))))
答案 1 :(得分:2)
使用base
R函数的这个函数怎么样:
cbind(indicator=c(rep("df1", nrow(df1)), rep("df2", nrow(df2))) ,dfTotal<-rbind(df1,df2))
会给你:
indicator c.1..2..3..4. rnorm.1.4. rnorm.1.4..1 rnorm.1.4..2
1 df1 1 -0.50219235 0.1169713 -0.82525943
2 df1 2 0.13153117 0.3186301 -0.35986213
3 df1 3 -0.07891709 -0.5817907 0.08988614
4 df1 4 0.88678481 0.7145327 0.09627446
5 df2 1 -0.20163395 -0.3888542 -0.43808998
6 df2 2 0.73984050 0.5108563 0.76406062
7 df2 3 0.12337950 -0.9138142 0.26196129
8 df2 4 -0.02931671 2.3102968 0.77340460
数据强>
set.seed(100)
df1<-data.frame(c(1,2,3,4),rnorm(1:4),rnorm(1:4),rnorm(1:4))
df2<-data.frame(c(1,2,3,4),rnorm(1:4),rnorm(1:4),rnorm(1:4))
dfTotal<-rbind(df1,df2)
答案 2 :(得分:1)
通过在df1和df2中添加2变量来获取行指示符的简单方法,如下所示
df1<-data.frame(c(1,2,3,4),rnorm(1:4),rnorm(1:4),rnorm(1:4),map="d1")
df2<-data.frame(c(1,2,3,4),rnorm(1:4),rnorm(1:4),rnorm(1:4),map="d2")
dfTotal<-rbind(df1,df2)
c.1..2..3..4. rnorm.1.4. rnorm.1.4..1 rnorm.1.4..2 map
1 1 1.5211423 -0.05746568 0.7507580 d1
2 2 -0.5016556 0.33257341 -0.7042438 d1
3 3 -0.7154221 -0.79463908 -1.0391944 d1
4 4 -0.3255207 0.04130148 -1.4263133 d1
5 1 -1.5784721 0.58019130 -0.2091264 d2
6 2 -1.1682966 -0.17827840 1.3235675 d2
7 3 0.3025030 1.98774090 0.3537830 d2
8 4 2.5133713 -0.28664053 1.0521226 d2
答案 3 :(得分:0)
这是一个较长的基本R方法,它将data.frames放入一个列表中进行操作:
# put the data.frames into a list
dfList <- mget(ls(pattern="df[0-9]+"))
# append the list of data.frames into a single data.frame
dfTotal <- do.call(rbind, dfList)
# get the ID from the row names
dfTotal$id <- as.integer(gsub("^df(\\d)+.*", "\\1", rownames(dfTotal)))
要了解有关使用data.frames列表的更多信息,请查看this post。