使用列中的值在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-越多越好。想做一个基准测试吗?在当前示例中并不是这样,但我认为如果源数据中有多个位置的重复行,这也可能会失败。我认为,使用行计数器可以避免这种情况。在当前示例中并非如此,但我认为,如果源数据中的多个位置恰好有重复的行,这种情况也可能会发生。我认为使用行计数器可以避免这种情况。