基于R中的另一个向量复制数据帧的行

基于R中的另一个向量复制数据帧的行,r,R,假设我有以下数据框: set.seed(1) df <- data.frame("x" = 1:5, "y" = rnorm(5)) x y 1 1 -0.6264538 2 2 0.1836433 3 3 -0.8356286 4 4 1.5952808 5 5 0.3295078 我该怎么做呢?虽然我更喜欢使用tidyverse解决方案,但我愿意接受任何其他建议。我们可以使用rep复制数据帧中的行,并使用times参数说明每行重复多少次 df[rep(1

假设我有以下数据框:

set.seed(1)
df <- data.frame("x" = 1:5, "y" = rnorm(5))

  x          y
1 1 -0.6264538
2 2  0.1836433
3 3 -0.8356286
4 4  1.5952808
5 5  0.3295078

我该怎么做呢?虽然我更喜欢使用tidyverse解决方案,但我愿意接受任何其他建议。

我们可以使用
rep
复制数据帧中的行,并使用
times
参数说明每行重复多少次

df[rep(1:nrow(df), times = df$x), ]
    x          y
1   1 -0.6264538
2   2  0.1836433
2.1 2  0.1836433
3   3 -0.8356286
3.1 3 -0.8356286
3.2 3 -0.8356286
4   4  1.5952808
4.1 4  1.5952808
4.2 4  1.5952808
4.3 4  1.5952808
5   5  0.3295078
5.1 5  0.3295078
5.2 5  0.3295078
5.3 5  0.3295078
5.4 5  0.3295078

我们可以使用
rep
,复制数据帧的行,并使用
times
参数说明每行重复多少次

df[rep(1:nrow(df), times = df$x), ]
    x          y
1   1 -0.6264538
2   2  0.1836433
2.1 2  0.1836433
3   3 -0.8356286
3.1 3 -0.8356286
3.2 3 -0.8356286
4   4  1.5952808
4.1 4  1.5952808
4.2 4  1.5952808
4.3 4  1.5952808
5   5  0.3295078
5.1 5  0.3295078
5.2 5  0.3295078
5.3 5  0.3295078
5.4 5  0.3295078
看起来我们几个人同时做到了


看起来我们中的几个人是同时到达的…

使用了
dplyr

dplyr::slice(df, rep(1:n(), x))                # as per Sir Gregor's recommendation
或者明确地

dplyr::slice(df,rep(1:nrow(df), df$x))

使用
dplyr

dplyr::slice(df, rep(1:n(), x))                # as per Sir Gregor's recommendation
或者明确地

dplyr::slice(df,rep(1:nrow(df), df$x))

我最近发现了同样有效的
dplyr::uncount()

dplyr::uncount(df, x)

我最近发现了同样有效的
dplyr::uncount()

dplyr::uncount(df, x)

我显然需要去散散步,因为我不能考虑我的问题的简单性。谢谢。这和我多年前问的问题非常相似,当我得到答案的时候我也有同样的感觉。或者另一个选择是“代码>扩展行(DF,‘X’,LUP=false’)< /代码>,我显然需要去散步,因为我不能考虑我的问题的简单性。谢谢。这实际上与我几年前问的一个问题非常相似,当我得到答案时我也有同样的感觉。或者另一个选项是
expandRows(df'x',drop=FALSE)
Aw,但是如果你要使用
dplyr
,请使用酷
n()
而不是蹩脚的
nrow()
。它可以保存三个输入字符!;)噢,但是如果你要使用dplyr,请使用酷的
n()
而不是蹩脚的
nrow()
。它可以保存三个输入字符!;)