样本df:
iris_subset <- iris[1:5, ]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
我正在寻找最好的解决方案,在其中我可以复制特定的行n次,并有机会说明在何处插入重复的行。
例如,我想在原始行之后重复2行两次。
所需的输出:
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.9 3.0 1.4 0.2 setosa
4 4.9 3.0 1.4 0.2 setosa
5 4.7 3.2 1.3 0.2 setosa
6 4.6 3.1 1.5 0.2 setosa
7 5.0 3.6 1.4 0.2 setosa
我可以草率地做类似的事情:
iris_subset <- rbind(iris_subset, iris[2,], iris[2,])
iris_subset <- iris_subset[c(1:2, 6:7, 3:5),]
row.names(iris_subset) <- 1:nrow(iris_subset)
但是,如果要对此进行功能化,则与在rbind
或其他替代方式中手动传入附加参数n次相比,我需要一种更好的方法来重复要复制的行,这效率极低。
答案 0 :(得分:2)
row_ind = 2
repeat_n = 3
place_at_row = 3
inds = append(x = 1:NROW(iris_subset),
values = rep(row_ind, repeat_n),
after = place_at_row - 1)
iris_subset[inds,]
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
#2.1 4.9 3.0 1.4 0.2 setosa
#2.2 4.9 3.0 1.4 0.2 setosa
#2.3 4.9 3.0 1.4 0.2 setosa
#3 4.7 3.2 1.3 0.2 setosa
#4 4.6 3.1 1.5 0.2 setosa
#5 5.0 3.6 1.4 0.2 setosa
答案 1 :(得分:1)
我们可以使用add_row
中的tidyverse
library(tidyverse)
add_row(iris_subset, !!! as.list(iris_subset[rep(2, each = 3),]), .after = 2)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
#3 4.9 3.0 1.4 0.2 setosa
#4 4.9 3.0 1.4 0.2 setosa
#5 4.9 3.0 1.4 0.2 setosa
#6 4.7 3.2 1.3 0.2 setosa
#7 4.6 3.1 1.5 0.2 setosa
#8 5.0 3.6 1.4 0.2 setosa