R 附加n个id相同的数据帧

R 附加n个id相同的数据帧,r,dataframe,data.table,R,Dataframe,Data.table,我想将n个相同的数据帧相互附加。如果n=2,则此操作有效: > d = data.frame(a=1:2) > dplyr::bind_rows(d,d, .id="id") # id a # 1 1 # 1 2 # 2 1 # 2 2 但我不知道如何将其扩展到更大的n值,而不需要手动键入类似于dplyr::bind_rows(d,d,d.id=“id”)的n=3。是否有一些聪明的方法可以通过编程将长度为n的d列表提供给bind\u rows命令?这不起作用:dplyr::

我想将n个相同的数据帧相互附加。如果
n=2
,则此操作有效:

> d = data.frame(a=1:2)
> dplyr::bind_rows(d,d, .id="id")
# id a
# 1  1
# 1  2
# 2  1
# 2  2
但我不知道如何将其扩展到更大的n值,而不需要手动键入类似于
dplyr::bind_rows(d,d,d.id=“id”)
n=3
。是否有一些聪明的方法可以通过编程将长度为n的
d
列表提供给bind\u rows命令?这不起作用:
dplyr::bind_行(rep(d,3),.id=“id”)


还有-是否有data.table解决方案

这里有一个使用
data.table::rbindlist()的解决方案

编码和输出

dat <- rbindlist(l, use.names = T, fill = T)

# Verify if data looks like what we want 
> str(dat)
Classes ‘data.table’ and 'data.frame':  96 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
 - attr(*, ".internal.selfref")=<externalptr> 
dat str(dat)
类“data.table”和“data.frame”:96 obs。在11个变量中:
$mpg:num2122.821.418.718.1144.324.422.819.2。。。
$cyl:num 6 4 6 8 6 8 4 4 6。。。
$disp:num 160 108 258 360。。。
$hp:num 110 93 110 175 105 245 62 95 123。。。
$drat:num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92。。。
$wt:num 2.62 2.88 2.32 3.21 3.44。。。
$qsec:num 16.51718.619.417。。。
$vs:num 0 1 0 1 0 1 1 1 1。。。
$am:num 11 0 0 0 0 0 0。。。
$gear:num 4 4 3 3 3 4 4 4 4。。。
$carb:num 4 1 2 1 4 2 4。。。
-属性(*,“.internal.selfref”)=

bind_rows
接受数据帧列表。因此,只需将所有
d
放入一个列表,然后将该列表传递给
bind\u rows
data.table::rbindlist()
特别是如果速度是一个问题,您可以使用
rep(list(d),3)
复制相同的数据集。我建议在复制时使用第二个答案,
result=d[rep(1:nrow(d),n),]
。粘贴
id
列很容易::
result$id=rep(1:n,each=nrow(d))
。(同样适用于数据表。)但dupe也使用了
purr
和其他更奇特、效率更低的方法。
# Check l
> str(l)
List of 3
 $ :'data.frame':   32 obs. of  11 variables:
  ..$ mpg : num [1:32] 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
  ..$ cyl : num [1:32] 6 6 4 6 8 6 8 4 4 6 ...
  ..$ disp: num [1:32] 160 160 108 258 360 ...
  ..$ hp  : num [1:32] 110 110 93 110 175 105 245 62 95 123 ...
  ..$ drat: num [1:32] 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
  ..$ wt  : num [1:32] 2.62 2.88 2.32 3.21 3.44 ...
  ..$ qsec: num [1:32] 16.5 17 18.6 19.4 17 ...
  ..$ vs  : num [1:32] 0 0 1 1 0 1 0 1 1 1 ...
  ..$ am  : num [1:32] 1 1 1 0 0 0 0 0 0 0 ...
  ..$ gear: num [1:32] 4 4 4 3 3 3 3 4 4 4 ...
  ..$ carb: num [1:32] 4 4 1 1 2 1 4 2 2 4 ...
 $ :'data.frame':   32 obs. of  11 variables:
  ..$ mpg : num [1:32] 42 42 45.6 42.8 37.4 36.2 28.6 48.8 45.6 38.4 ...
  ..$ cyl : num [1:32] 12 12 8 12 16 12 16 8 8 12 ...
  ..$ disp: num [1:32] 320 320 216 516 720 ...
  ..$ hp  : num [1:32] 220 220 186 220 350 210 490 124 190 246 ...
  ..$ drat: num [1:32] 7.8 7.8 7.7 6.16 6.3 5.52 6.42 7.38 7.84 7.84 ...
  ..$ wt  : num [1:32] 5.24 5.75 4.64 6.43 6.88 6.92 7.14 6.38 6.3 6.88 ...
  ..$ qsec: num [1:32] 32.9 34 37.2 38.9 34 ...
  ..$ vs  : num [1:32] 0 0 2 2 0 2 0 2 2 2 ...
  ..$ am  : num [1:32] 2 2 2 0 0 0 0 0 0 0 ...
  ..$ gear: num [1:32] 8 8 8 6 6 6 6 8 8 8 ...
  ..$ carb: num [1:32] 8 8 2 2 4 2 8 4 4 8 ...
 $ :'data.frame':   32 obs. of  11 variables:
  ..$ mpg : num [1:32] 63 63 68.4 64.2 56.1 54.3 42.9 73.2 68.4 57.6 ...
  ..$ cyl : num [1:32] 18 18 12 18 24 18 24 12 12 18 ...
  ..$ disp: num [1:32] 480 480 324 774 1080 ...
  ..$ hp  : num [1:32] 330 330 279 330 525 315 735 186 285 369 ...
  ..$ drat: num [1:32] 11.7 11.7 11.55 9.24 9.45 ...
  ..$ wt  : num [1:32] 7.86 8.62 6.96 9.64 10.32 ...
  ..$ qsec: num [1:32] 49.4 51.1 55.8 58.3 51.1 ...
  ..$ vs  : num [1:32] 0 0 3 3 0 3 0 3 3 3 ...
  ..$ am  : num [1:32] 3 3 3 0 0 0 0 0 0 0 ...
  ..$ gear: num [1:32] 12 12 12 9 9 9 9 12 12 12 ...
  ..$ carb: num [1:32] 12 12 3 3 6 3 12 6 6 12 ...
dat <- rbindlist(l, use.names = T, fill = T)

# Verify if data looks like what we want 
> str(dat)
Classes ‘data.table’ and 'data.frame':  96 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
 - attr(*, ".internal.selfref")=<externalptr>