我有这样一个列的dataframe:

他是dataframe的一个例子(真实的一个有多个列,但是,为此,我将只发布重要的一栏):
structure(list(frame = c(0L, 0L, 0L, 0L, 473047L, 0L, 473049L,0L, 0L, 473051L, 0L, 0L, 473052L, 0L, 473055L)), row.names = c(NA, -15L), class = "data.frame")帧列表示帧号。列中的0与后面的大数属于同一帧。因此,我想将前四个0改为473047,然后将下一个奇异值0改为473049,然后将接下来的两个0改为473051,依此类推。
有没有人有关于如何在基R或使用tidyverse中这样做的提示?我想也许for循环/if语句组合可以通过某种索引过程来工作。
for the length of the frame column
if frame > 0
count back up the column and replace the preceding 0s with that number然而,除了这个伪代码之外,我想不出一个可能的解决方案。任何帮助都将不胜感激!
发布于 2022-06-01 17:05:07
您可以尝试这样做,首先用NAs替换零。
library(dplyr)
library(tidyr)
dat %>%
mutate(frame = ifelse(frame == 0, NA, frame)) %>%
fill(frame, .direction = "up")
frame
1 473047
2 473047
3 473047
4 473047
5 473047
6 473049
7 473049
8 473051
9 473051
10 473051
11 473052
12 473052
13 473052
14 473055
15 473055发布于 2022-06-01 17:01:21
首先用NA替换零。之后,您可以使用来自zoo的zoo
library(dplyr)
library(zoo)
df %>%
na_if(0) %>%
na.locf(., fromLast = TRUE)输出:
frame
1 473047
2 473047
3 473047
4 473047
5 473047
6 473049
7 473049
8 473051
9 473051
10 473051
11 473052
12 473052
13 473052
14 473055
15 473055发布于 2022-06-01 17:19:42
我们可以像Quinten那样使用na.locf。但这里的R基是:
library(zoo)
df$frame<-na.locf(with(df,ifelse(frame==0,NA_real_,frame)),fromLast=TRUE)
frame
1 473047
2 473047
3 473047
4 473047
5 473047
6 473049
7 473049
8 473051
9 473051
10 473051
11 473052
12 473052
13 473052
14 473055
15 473055https://stackoverflow.com/questions/72465363
复制相似问题