定义一个新列

时间:2019-10-18 14:15:10

标签: r dataframe

我想为col3==loop的行定义1列,在col3==loop之后为2,直到它们到达col3==loopcol3==a或{{ 1}}否则为0。

示例

col3==b.

让我知道是否不清楚

1 个答案:

答案 0 :(得分:1)

以下代码完成了问题的要求。它使用索引向量将12分配给新列中的适当位置。我已经阅读了预期的输出并创建了列loop2,以将结果与发布的列loop进行比较。在检查答案是否正确之后,请更改此值。

i1 <- which(df1$col3 == "loop")
i2 <- which(df1$col3 %in% c("a", "b"))
df1$loop2 <- 0
df1$loop2[i1] <- 1
k <- Map(`:`, (i1 + 1), i2[findInterval(i1, i2) + 1])
df1$loop2[unlist(k)] <- 2

df1
#   group1 group2 col3 loop loop2
#1       1      1    a    0     0
#2       1      1 loop    1     1
#3       1      1    d    2     2
#4       1      1    c    2     2
#5       1      1    b    2     2
#6       1      1    f    0     0
#7       1      2 loop    1     1
#8       1      2    a    2     2
#9       1      2    h    0     0
#10      1      2    f    0     0
#11      2      1    b    0     0
#12      2      1    g    0     0

数据。

df1 <- read.table(text = "
        group1    group2     col3          loop
          1         1         a             0
          1         1         loop          1
          1         1         d             2
          1         1         c             2 
          1         1         b             2
          1         1         f             0
          1         2         loop          1
          1         2         a             2
          1         2         h             0
          1         2          f            0
          2         1          b            0
          2         1          g            0
", header = TRUE)