我有一个名为' a'。
的数据框 ID V1
1 -1
1 0
1 1
1 1000
1 0
1 1
2 -1
2 0
2 1000
...
我缩短了这个数据框以简要显示。
现在我想使用条件变异函数创建一个新列,但它应该引用mutate函数创建的新列。
a %>%
group_by(ID) %>%
mutate(V2, ifelse(row_number() == 1, 1,
ifelse(V1 < 1000, 1,
ifelse(V1 >= 1000, lag(V2) + 1))
&#34;错误:然后&#39; V2&#39;找不到&#34;消息产生。
这个结果就是我想要的。
ID V1 V2
1 -1 1
1 0 1
1 1 1
1 1000 2
1 0 2
1 1 2
2 -1 1
2 0 1
2 1000 2
我怎么得到这个?谢谢你的帮助。
答案 0 :(得分:4)
我们可以尝试
a %>%
group_by(ID) %>%
mutate(V2 = cumsum(V1 >= 1000)+1L)
# ID V1 V2
# <int> <int> <int>
#1 1 -1 1
#2 1 0 1
#3 1 1 1
#4 1 1000 2
#5 1 0 2
#6 1 1 2
#7 2 -1 1
#8 2 0 1
#9 2 1000 2
a <- structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L),
V1 = c(-1L,
0L, 1L, 1000L, 0L, 1L, -1L, 0L, 1000L)), .Names = c("ID", "V1"
), class = "data.frame", row.names = c(NA, -9L))
答案 1 :(得分:1)
这应该有效:
echo 1.0.5 | perl -pe 's/\.//g;$_++;s/(\d)/$1./g;s/\.$/\n/;'
更新:从 row_number()&gt;更改了第二个ifelse逻辑语句1&amp; V1&lt; 1000 到上面显示的那个。 此更改应提供评论中要求的结果。