如何 select 并在 r 中的数据框中重复多行

How to select and repeat a number of rows in a dataframe in r

我想我的问题很简单,但我找不到正确的答案。

在任何给定的数据框中:

> data.frame(x0=c(1,2,3,4), x1=rnorm(4))
  x0         x1
1  1 -0.1868765
2  2 -0.2935534
3  3 -1.3934953
4  4  0.8165035

想象一下,我想每两行重复 2 次,结果如下所示:

> data.frame(x0=c(1,2,3,4), x1=rnorm(4))
  x0         x1
1  1 -0.1868765
2  2 -0.2935534
3  1 -0.1868765
4  2 -0.2935534
5  3 -1.3934953
6  4  0.8165035
7  3 -1.3934953
8  4  0.8165035


最简单的方法是什么?

提前致谢!

您可以创建 2 行的组并为每个组重复两次,取消列出索引和子集。

set.seed(123)
df <- data.frame(x0=c(1,2,3,4), x1=rnorm(4))

inds <- seq(nrow(df))
df[unlist(tapply(inds, ceiling(inds/2), rep, 2)), ]

#    x0          x1
#1    1 -0.56047565
#2    2 -0.23017749
#1.1  1 -0.56047565
#2.1  2 -0.23017749
#3    3  1.55870831
#4    4  0.07050839
#3.1  3  1.55870831
#4.1  4  0.07050839

实际上,您可以使用 rep 来做到这一点。

d[rep(seq(nrow(d)), each=2), ]
# x0          x1
# 1    1 -0.56047565
# 1.1  1 -0.56047565
# 2    2 -0.23017749
# 2.1  2 -0.23017749
# 3    3  1.55870831
# 3.1  3  1.55870831
# 4    4  0.07050839
# 4.1  4  0.07050839

数据:

d <- structure(list(x0 = c(1, 2, 3, 4), x1 = c(-0.560475646552213, 
-0.23017748948328, 1.55870831414912, 0.070508391424576)), class = "data.frame", row.names = c(NA, 
-4L))

我们可以使用uncount

library(dplyr)
library(tidyr)
df %>% 
   uncount(2) %>%
   as_tibble

-输出

# A tibble: 8 x 2
#     x0      x1
#  <dbl>   <dbl>
#1     1 -0.560 
#2     1 -0.560 
#3     2 -0.230 
#4     2 -0.230 
#5     3  1.56  
#6     3  1.56  
#7     4  0.0705
#8     4  0.0705

数据

set.seed(123)
df <- data.frame(x0=c(1,2,3,4), x1=rnorm(4))