使用列中的值在R数据框中插入N个空行

使用列中的值在R数据框中插入N个空行,r,dataframe,transformation,R,Dataframe,Transformation,我有一个数据框: Var_1 = c("A","B","C","D","E","F","G","H") Var_2 = c(0,1,0,2,1,0,0,1) DF = data.frame(Var_1,Var_2) print(DF) Var_1 Var_2 1 A 0 2 B 1 3 C 0 4 D 2 5 E 1 6 F 0 7 G 0 8 H 1 我需要在数

我有一个数据框:

Var_1 = c("A","B","C","D","E","F","G","H")
Var_2 = c(0,1,0,2,1,0,0,1)
DF = data.frame(Var_1,Var_2)
print(DF)

 Var_1 Var_2
1     A     0
2     B     1
3     C     0
4     D     2
5     E     1
6     F     0
7     G     0
8     H     1
我需要在数据框中插入填入NA的N空行,使用Var_2中的值确定N。这些新行应在Var_2值>=1之后立即插入。因此,我希望我的数据框如下所示:

print(DF)

 Var_1 Var_2
1      A     0
2      B     1
3   <NA>    NA
4      C     0
5      D     2
6   <NA>    NA
7   <NA>    NA
8      E     0
9      F     0
10     G     0
11     H     1
12  <NA>    NA
打印(DF)
变量1变量2
1 A 0
2 B 1
3 NA
4c0
5D2
6 NA
7 NA
8 E 0
9f0
10克0
11小时1
12 NA
我被这件事缠住了,任何帮助都将不胜感激。谢谢。

有趣的问题:

ind0)
ind
# [1] 2 4 5 8
开始有趣的问题:

ind0)
ind
# [1] 2 4 5 8

开始执行序列并对救援进行子集设置。
当值为
>0
时,通过
Var_2+1
复制每一行将生成
Var_2
额外的行,并在值
==0

然后,您可以使用序列上的
duplicated
TRUE/FALSE
,仅将附加行替换为
NA

s <- rep(sequence(nrow(DF)), DF$Var_2 + 1)
DFnew <- DF[s,]
DFnew[duplicated(s),] <- NA
DFnew
#    Var_1 Var_2
#1       A     0
#2       B     1
#2.1  <NA>    NA
#3       C     0
#4       D     2
#4.1  <NA>    NA
#4.2  <NA>    NA
#5       E     1
#5.1  <NA>    NA
#6       F     0
#7       G     0
#8       H     1
#8.1  <NA>    NA

s序列和救援子集。
当值为
>0
时,通过
Var_2+1
复制每一行将生成
Var_2
额外的行,并在值
==0

然后,您可以使用序列上的
duplicated
TRUE/FALSE
,仅将附加行替换为
NA

s <- rep(sequence(nrow(DF)), DF$Var_2 + 1)
DFnew <- DF[s,]
DFnew[duplicated(s),] <- NA
DFnew
#    Var_1 Var_2
#1       A     0
#2       B     1
#2.1  <NA>    NA
#3       C     0
#4       D     2
#4.1  <NA>    NA
#4.2  <NA>    NA
#5       E     1
#5.1  <NA>    NA
#6       F     0
#7       G     0
#8       H     1
#8.1  <NA>    NA

s您可以重复每行
Var_2
次,并用
NA

library(dplyr)
DF1 <- DF %>% mutate(Var_3 = Var_2 + 1, row = row_number()) %>% 
             tidyr::uncount(Var_3)
DF1[duplicated(DF1$row), ] <- NA
DF1$row <- NULL

#    Var_1 Var_2
#1       A     0
#2       B     1
#2.1  <NA>    NA
#3       C     0
#4       D     2
#4.1  <NA>    NA
#4.2  <NA>    NA
#5       E     1
#5.1  <NA>    NA
#6       F     0
#7       G     0
#8       H     1
#8.1  <NA>    NA
库(dplyr)
DF1%变异(Var\U 3=Var\U 2+1,row=row\U number())%>%
tidyr::取消计数(变量3)

DF1[重复(DF1$row),]您可以重复每行
Var_2
次,并用
NA

library(dplyr)
DF1 <- DF %>% mutate(Var_3 = Var_2 + 1, row = row_number()) %>% 
             tidyr::uncount(Var_3)
DF1[duplicated(DF1$row), ] <- NA
DF1$row <- NULL

#    Var_1 Var_2
#1       A     0
#2       B     1
#2.1  <NA>    NA
#3       C     0
#4       D     2
#4.1  <NA>    NA
#4.2  <NA>    NA
#5       E     1
#5.1  <NA>    NA
#6       F     0
#7       G     0
#8       H     1
#8.1  <NA>    NA
库(dplyr)
DF1%变异(Var\U 3=Var\U 2+1,row=row\U number())%>%
tidyr::取消计数(变量3)

DF1[duplicated(DF1$row),]刚刚意识到,我的答案的逻辑与你的答案相似,但你的答案在base中。@RonakShah-越多越好。想做一个基准测试吗?刚刚意识到,我的答案的逻辑与你的答案相似,但你的答案是基本的。@RonakShah-越多越好。想做一个基准测试吗?在当前示例中并不是这样,但我认为如果源数据中有多个位置的重复行,这也可能会失败。我认为,使用行计数器可以避免这种情况。在当前示例中并非如此,但我认为,如果源数据中的多个位置恰好有重复的行,这种情况也可能会发生。我认为使用行计数器可以避免这种情况。