r - 如果满足条件,则复制前一行

标签 r dplyr

我的数据

set.seed(123)
df <- data.frame(loc = rep(1:5, each = 5),value = sample(0:4, 25, replace = T))
a <- c("x","y","z","k")
df$id <- ifelse(df$value == 0, "no.data", sample(a,1))
head(df)

   loc value     id
1   1     1       z
2   1     3       z
3   1     2       z
4   1     4       z
5   1     4       z
6   2     0 no.data

我没有数据的行,idvalue 列有 no.data0 。对于没有数据的所有行(id == no.datavalue == 0),我想复制 value 和前一行的 id

    loc value   id
 1   1     1    z
 2   1     3    z
 3   1     2    z
 4   1     4    z
 5   1     4    z
 6   2     4    z

类似于:

df %>% group_by(loc) %>% mutate(value = ifelse(value == 0, copy the value from preceding row), id = ifelse(id== "no.data", copy the id from preceding row ))      

最佳答案

我们可以将 0s 替换为 NA,然后进行填充

library(tidyverse)
library(naniar)
df %>% 
   replace_with_na(replace = list(value = 0, id = "no.data")) %>% 
   fill(value, id)

关于r - 如果满足条件,则复制前一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50374197/

相关文章:

r - 聚合并查找匹配项

r - 使用 dplyr 将所有行保持在 R 中的特定值

r - R 脚本中的 SSH 获取 MySQL 数据库

r - 计算数据框中多个纬度、经度点的中心点

R 插入符 : What causes error "undefined columns selected" using sbf and method "ranger"?

r - 如何使用 bquote() 在 scale_x_discrete() 内的 ggplot2 中动态创建标签?

arrays - 如何将多个文件读入一个多维数组

r - R中唯一值的累积计数

R函数根据重复时间组合行

r - dplyr:filter()中的动态变量