在没有循环的两个值之间替换 NA

佩德罗·阿伦卡尔

我有以下数据框:

data <- structure(list(Date = structure(c(-17897, -17896, -17895, -17894, 
                  -17893, -17892, -17891, -17890, -17889, -17888, -17887, -17887, 
                  -17886, -17885, -17884, -17883, -17882, -17881, -17880, -17879, 
                  -17878, -17877, -17876, -17875, -17874, -17873, -17872, -17871, 
                  -17870, -17869, -17868, -17867, -17866, -17865, -17864), class = "Date"), 
                  duration = c(NA, NA, NA, 5, NA, NA, NA, 5, NA, NA, 1, 1, 
                  NA, NA, 3, NA, 3, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
                  NA, NA, 4, NA, NA, 4, NA, NA), name = c(NA, NA, NA, "Date_beg", 
                  NA, NA, NA, "Date_end", NA, NA, "Date_beg", "Date_end", NA, 
                  NA, "Date_beg", NA, "Date_end", NA, NA, NA, NA, NA, NA, NA, 
                  NA, NA, NA, NA, NA, "Date_beg", NA, NA, "Date_end", NA, NA
                  )), row.names = c(NA, -35L), class = c("tbl_df", "tbl", "data.frame"
                ))

看起来像:

   Date       duration name    
   <date>        <dbl> <chr>   
 1 1921-01-01       NA NA      
 2 1921-01-02       NA NA      
 3 1921-01-03       NA NA      
 4 1921-01-04        5 Date_beg
 5 1921-01-05       NA NA      
 6 1921-01-06       NA NA      
 7 1921-01-07       NA NA      
 8 1921-01-08        5 Date_end
 9 1921-01-09       NA NA      
10 1921-01-10       NA NA   
...   

我想用单词"event"替换行之间的列中NAnameDate_begDate_end

我试过这个:

data %<>% mutate(name = ifelse(((lag(name) == 'Date_beg')|(lag(name) == 'event')) &

但只有Date_beg之后的第一行发生了变化。使用 for 循环很容易,但我想使用更像 R 的方法。

山姆

使用 可能有更好的方法data.table::nafill,但是当您使用tidyverse函数时,我会通过event使用创建一个额外的列tidyr::fill然后将其拉到NAname所在的列来做到这一点:name

library(tidyr)
data  %>%
    mutate(
    events = ifelse(
        fill(data, name)$name == "Date_beg", 
         "event",
         NA), 
     name = coalesce(name, events)
    )  %>% 
    select(-events) 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在两个Excel之间的Vlookup之后查找#NA值

如果组中的其他两个值是 NA,则分组并替换组中的值

如何用最接近的两个值的平均值替换NA

r-将NA替换为根据两个索引向量的值

R:用两个最连续值的平均值替换NA

合并两个data.frame后如何替换NA值?

如何通过匹配 ID 和两个不同的数据框来替换 NA 值

SQLDF在R中合并:计算两个日期之间的NA值

连接两个时间序列,如果第二个数据帧中有数字值,则替换为NA

如何使用lubridate软件包计算两个日期向量之间的月份数(其中一个向量具有NA值)?

如何用“NA”填充两个列表之间的差异

将数据框中两个特定列中的值的10%随机替换为NA值

rbind两个表并用具有相同变量的值填充NA的行

对矩阵列表求和,对NA有两个约束

用序列替换值之间的 NA

替换 NA 值

在R中合并两个数据帧-值替换为NA

用最新的非NA值替换NA

如果一列中至少有两个零,我如何用 NA 替换所有零?

查找两个向量之间的不匹配位置,包括NA

R-如何在数据框中的两个对应ID之间填充NA

忽略NA值,同时将两个列值粘贴到R中

NA没有被取代

如何在多个列之间用NA有条件地替换值

如何制作一个每行正好有两个数值而其他地方都没有NA的矩阵?

合并两个数据框,但只包含没有 NA 的变量

R OR比较两个布尔值,我想要F | NA返回F

消除NA并绑定两个列值,并将结果绘制在R中

根据NA在数据帧的其他两个变量中分配值