r - 用数据帧中变量的可变长度数字序列替换 NA 时出错
问题描述
我有一个包含许多变量的数据框,但我只想关注一个“X”,如下所示:
df <- data.frame("x" = c("NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 1, "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 1, "NA", "NA", "NA", "NA", "NA", "NA", "NA", 1, "NA", "NA", "NA", "NA", "NA", "NA", 1,"NA", "NA", "NA", "NA", "NA", 1, "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 1))
我想要做的是以某种方式从 2 开始按顺序填充数字:
- 当有 x==1 时,下一个 NA 应该取 2、3、4 等等,直到再次 x==1 到达,然后下一个 NA 应该开始填充 2、3、4,等等。
示例输出:
x = 2,3,4,5,1,2,3,4,5,6,7,1,2,3,4,5,6,7,8,9,1,2,3,4,1,2,3,4,5,1 ......
我想做的是:
df$Sequence <- ifelse(df1$x!="1" & is.na(df1$x), seq(2,100), df1$x)
但这并没有返回我预期的输出,为什么?
解决方案
由于x
从 8 Continuous 开始,NA
如何估算第一行仍然不清楚。为什么您的示例输出以 2 开头?以下是如何从第一次出现 1 开始计算所有内容。我修改了示例,让它从 1 开始:
library(tidyverse)
df <- data.frame("x" = c(1, "NA", "NA", "NA", "NA", "NA", "NA", "NA", 1, "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 1, "NA", "NA", "NA", "NA", "NA", "NA", "NA", 1, "NA", "NA", "NA", "NA", "NA", "NA", 1, "NA", "NA", "NA", "NA", "NA", 1, "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", 1))
df <-
df %>%
na_if("NA") %>%
as_tibble() %>%
mutate(id = row_number())
y <-
df %>%
filter(x == 1) %>%
# calculate block sizes
transmute(
from = id,
to = lead(id),
diff = to - from
) %>%
# vector ends with a 1 and there is no n+1 th element
replace_na(list(diff = 1)) %>%
pull(diff) %>%
map(seq) %>%
flatten() %>%
as.numeric()
y
#> [1] 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 1 2 3 4 5 6
#> [39] 1 2 3 4 5 6 7 8 9 1
df %>% transmute(x, y = y)
#> # A tibble: 48 x 2
#> x y
#> <chr> <dbl>
#> 1 1 1
#> 2 <NA> 2
#> 3 <NA> 3
#> 4 <NA> 4
#> 5 <NA> 5
#> 6 <NA> 6
#> 7 <NA> 7
#> 8 <NA> 8
#> 9 1 1
#> 10 <NA> 2
#> # … with 38 more rows
由reprex 包于 2021-10-20 创建(v2.0.1)
推荐阅读
- html - 仅使用 HTML 和 CSS 构建轮播
- javascript - 电子关闭和最小按钮不起作用
- kivy - Kivy Scater Transform 在 boxlayout 中不起作用
- ruby - 有没有办法在 Ruby on Rails 中下载共享远程文件?
- javascript - 将最大超时应用于 Javasciprt 中的回调函数的最佳方法
- ios - Swift 类和变量在 Objective-C 中不是分配和可见的
- css - 如何仅在 prestashop 中更改一页上的标题样式
- animation - showAndWait() 与动画,使用 Platform.runlater() 给出不同的行为
- java - 在哪里可以找到 Spring WebSocket 集成测试神器?
- javafx - 是否可以放大 JavaFX 中进度条的尖端?