编辑:如何在R中的特定字符值之间插入NAs

时间:2018-04-05 02:27:08

标签: r data-manipulation data-management

我有一个带有虚拟字符的值列表," break",编码以表示换行符:

 [11] "break"       "-9.737715"   "0.000091"   "-0.000340"   "-0.001318"
 [16] "-38.103233"  "-10.327046"  "break"      "27.469583"   "break"

我需要:1)计算每次出现" break"之间的字符,以及2)将NAs插入不符合指定字符数的字符串(= 9)。举个例子,我上面代码的理想输出是:

         [11] "break"       "-9.737715"   "0.000091"   "-0.000340"   "-0.001318"
         [16] "-38.103233"  "-10.327046"  "NA"         "NA"          "NA"
         [21] "break"       "27.469583"   "NA"         "NA"          "NA"   
         [26] "NA"          "NA"          "NA"         "NA"          "NA"
         [31]  "break"

无法在任何地方找到解决方案......帮助赞赏!

2 个答案:

答案 0 :(得分:1)

其中一种方法可能是

CompletableFuture<List<Closest>> closest = distanceService.getClosestByZip("111111")
            .exceptionally(ex -> {
                System.out.println("From exceptionally");
                return null;
            })
            .toCompletableFuture();


    try {
        List<Closest> list = closest.get();
        Assert.assertEquals(2, list.size());
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
        Assert.fail("Exception was not caught");
    }

示例数据:

y <- c()
cnt_betwn_break <- 0

for(i in 1:length(a)){
  ifelse(a[i]=='break',
         {if(!(cnt_betwn_break %in% c(0,9))) y <- c(y, rep(NA, 9 - cnt_betwn_break))
          cnt_betwn_break <- 0},
         cnt_betwn_break <- cnt_betwn_break + 1)
  y <- c(y, a[i])
}
y
# [1] "break"      "-9.737715"  "0.000091"   "-0.000340"  "-0.001318"  "-38.103233" "-10.327046" NA          
# [9] NA           NA           "break"      "27.469583"  NA           NA           NA           NA          
#[17] NA           NA           NA           NA           "break"     

答案 1 :(得分:0)

这几乎是你想要的 - 它在最后一次休息后添加了一组NA。 (如果您知道最后一个条目是休息,那么您可以在计算休息时间之前将其删除。如果最后一个条目不是休息,它应该有效。)

x <-  c("break" ,"-9.737715", "0.000091", "-0.000340", "-0.001318", "-38.103233",  "-10.327046",  "break" , "27.469583",   "break")
count_breaks = cumsum(x == "break")
unlist(tapply(x, count_breaks, function(.x) {
  c(.x, rep(NA, 10 - length(.x)))
}))