我正在寻找一种有效的方式来打开这样的数据框:
1 45
2 49
5 25
6 24
9 32
11 39
进入这样的数据框:
1 45
2 49
3 49
4 49
5 25
6 24
7 24
8 24
9 32
10 32
11 39
因此,这基本上是为左列中的序列中的缺失值添加行,并使用右列的最后一个值。我正在尝试为1,000,000行的数据框执行此操作,而且我的功能非常慢。我认为必须有一个更快的方法。
我这样做的方法是首先把它放到data.frame中我打电话给w
:
1 45
2 49
3 0
4 0
5 25
6 24
7 0
8 0
9 32
10 0
11 39
这个步骤非常快,不是问题,但后来我使用:
for (i in 1:nrow(w)) {
if(w[i,2]==0) {w[i,2]<-w[i-1,2]}
}
大部分时间花在'&lt; - '上,但我尝试了很多不同的方法,这是我能想到的最快的方法。当我做20,000行时它很快,但当我尝试1,000,000行时,它需要大约30分钟。
有没有人有任何想法?
答案 0 :(得分:2)
使用第一列中每个值之间的diff
来rep
吃每一行:
out <- dat[rep(rownames(dat), c(diff(dat$V1), 1)),]
out$V1 <- seq_len(nrow(out))
out
# V1 V2
#1 1 45
#2 2 49
#2.1 3 49
#2.2 4 49
#3 5 25
#4 6 24
#4.1 7 24
#4.2 8 24
#5 9 32
#5.1 10 32
#6 11 39
dat
的位置:
dat <- structure(list(V1 = c(1L, 2L, 5L, 6L, 9L, 11L), V2 = c(45L, 49L,
25L, 24L, 32L, 39L)), .Names = c("V1", "V2"), class = "data.frame",
row.names = c(NA,-6L))
答案 1 :(得分:0)
以下是04-16 21:43:54.597 13522-13522/co.edu.javeriana.faros D/RoutinesViewAdapter: position: 0 holder: ViewHolder{883eb98 position=0 id=-1, oldPos=-1, pLpos:-1 no parent} show?: true
04-16 21:43:54.862 13522-13522/co.edu.javeriana.faros D/RoutinesViewAdapter: position: 0 holder: ViewHolder{263b1503 position=0 id=-1, oldPos=-1, pLpos:-1 scrap [changeScrap] tmpDetached not recyclable(1) no parent} show?: true
04-16 21:43:55.387 13522-13522/co.edu.javeriana.faros D/RoutinesViewAdapter: position: 0 holder: ViewHolder{883eb98 position=0 id=-1, oldPos=-1, pLpos:-1 no parent} show?: true
04-16 21:43:55.668 13522-13522/co.edu.javeriana.faros D/RoutinesViewAdapter: position: 0 holder: ViewHolder{263b1503 position=0 id=-1, oldPos=-1, pLpos:-1 scrap [changeScrap] tmpDetached not recyclable(1) no parent} show?: true
04-16 21:43:55.949 13522-13522/co.edu.javeriana.faros D/RoutinesViewAdapter: position: 0 holder: ViewHolder{883eb98 position=0 id=-1, oldPos=-1, pLpos:-1 no parent} show?: true
04-16 21:43:56.189 13522-13522/co.edu.javeriana.faros D/RoutinesViewAdapter: position: 0 holder: ViewHolder{263b1503 position=0 id=-1, oldPos=-1, pLpos:-1 scrap [changeScrap] tmpDetached not recyclable(1) no parent} show?: true
04-16 21:43:56.479 13522-13522/co.edu.javeriana.faros D/RoutinesViewAdapter: position: 0 holder: ViewHolder{883eb98 position=0 id=-1, oldPos=-1, pLpos:-1 no parent} show?: true
和expand.grid
na.locf
答案 2 :(得分:0)
以下是使用tidyr
包的另一种解决方案:
library(tidyr)
dat %>%
complete(V1 = full_seq(V1, 1)) %>%
fill(V2)