我想为col3==loop
的行定义1列,在col3==loop
之后为2,直到它们到达col3==loop
或col3==a
或{{ 1}}否则为0。
示例
col3==b.
让我知道是否不清楚
答案 0 :(得分:1)
以下代码完成了问题的要求。它使用索引向量将1
和2
分配给新列中的适当位置。我已经阅读了预期的输出并创建了列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)