【问题标题】:Fill NAs in column with either 0 or value n above repeated n times用 0 或重复 n 次以上的值 n 填充列中的 NA
【发布时间】:2023-01-17 21:36:32
【问题描述】:

我有一个看起来像的数据框:

df <- data.frame(x = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12),
                 y = c(NA, 2, NA, NA, NA, 3, NA, NA, NA, 1, NA, NA))

我希望它看起来像这样:

data.frame(x = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12),
           y = c(0, 2, 2, 0, 0, 3, 3, 3, 0, 1, 0, 0))

#>     x y
#> 1   1 0
#> 2   2 2
#> 3   3 2
#> 4   4 0
#> 5   5 0
#> 6   6 3
#> 7   7 3
#> 8   8 3
#> 9   9 0
#> 10 10 1
#> 11 11 0
#> 12 12 0

我已经用 while 循环解决了问题,但一直在寻找更像 R 的解决方案。

这是循环解决方案:

df[is.na(df)] <- 0 # replace all NA with 0

i = 1
while (i < nrow(df)){
  
  if (df$y[i] < 2){ # do nothing if y = 1
    i = i+1
  } else {
    df$y[(i+1):(i+df$y[i]-1)] <- df$y[i]
    i = i+df$y[i]
  }
}

【问题讨论】:

    标签: r while-loop


    【解决方案1】:
    value = y[complete.cases(y)]
    idx = which(complete.cases(y))
    v = numeric(length(y)) 
    v[sequence(value, idx)] <- rep(value, value)
    #[1] 0 2 2 0 0 3 3 3 0 1 0 0
    

    【讨论】:

      猜你喜欢
      • 2019-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多