基于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()
。它可以保存三个输入字符!;)