r - dplyr mutate引用新列本身

时间:2016-05-20 07:48:58

标签: r dplyr

我有一个名为' 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

我怎么得到这个?谢谢你的帮助。

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 到上面显示的那个。 此更改应提供评论中要求的结果。