R中的数据分类

伊帕

当我将标志设置为1时,我想评估所有值。在以下示例中,我要进行2次评估:

  • 从行1到行3中哪个“输入”较低,从而评估第一行,第二行和第三行“输入” -s。
  • 从第5行到第7行中哪个“输入”值较低,计算第5行,第6行和第7行“ input” -s。

我想在列out上显示“输入”的最低值的“ input2”值,在列“ rest”上显示其余的值。

这是我的输入数据

flag <- c(0, 1, 1, 0, 0, 1,1)
input<- c(1,2,3,4,5,6,7)
input2<- c("a","b","c","d","e","f","g")
library(data.table)
data.dt <- data.table(flag,input, input2)
data.dt
#>    flag input input2
#> 1:    0     1      a
#> 2:    1     2      b
#> 3:    1     3      c
#> 4:    0     4      d
#> 5:    0     5      e
#> 6:    1     6      f
#> 7:    1     7      g

我想获得以下结果:

    flag    input    input2      out    rest
      0       1        a          -       -
      1       2        b          a       b
      1       3        c          a       b,c
      0       4        d          -       -
      0       5        e          -       -
      1       6        f          e       f
      1       7        g          e       f,g
阿克伦

这是一个选择

data.dt[,  grp := cumsum(c(TRUE, diff(flag) < 0))]
i1 <- data.dt[, .I[!(shift(flag, type = 'lead') == 0 & flag == 0)], .(grp)]$V1
i2 <- data.dt[, .I[flag == 0]]
i3 <- setdiff(i1, i2)
data.dt[i1,  out := input2[flag == 0], .(grp)]
 data.dt[i2, out := NA]
v2 <- data.dt[i1, {v1 <- input2[flag == 1];sapply(seq_along(v1), 
      function(i) toString(v1[seq_len(i)]))}, .(grp)]$V1
data.dt[i3, rest := v2][, grp := NULL][]
#    flag input input2  out rest
#1:    0     1      a <NA> <NA>
#2:    1     2      b    a    b
#3:    1     3      c    a b, c
#4:    0     4      d <NA> <NA>
#5:    0     5      e <NA> <NA>
#6:    1     6      f    e    f
#7:    1     7      g    e f, g

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章