簡體   English   中英

r-dplyr mutate引用新列本身

[英]r - dplyr mutate refer new column itself

我有一個像這樣的數據框,名為“ a”。

   ID        V1
   1         -1 
   1          0 
   1          1 
   1        1000 
   1          0 
   1          1
   2         -1 
   2          0 
   2         1000 


...

我縮短此數據框以簡要顯示。

現在,我想使用條件mutate函數創建一個新列,但是它應該引用由mutate函數創建的新列。

a %>%
  group_by(ID) %>%
    mutate(V2, ifelse(row_number() == 1, 1, 
      ifelse(V1 < 1000, 1,
      ifelse(V1 >= 1000, lag(V2) + 1))

產生“錯誤:然后找不到'V2'”消息。

這個結果就是我想要的。

   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

我怎么得到這個? 謝謝你的幫助。

我們可以試試

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))

這應該工作:

a %>% group_by(ID) %>% mutate(V2 = ifelse(row_number() == 1, 1, 0) + 
                                ifelse(row_number() > 1 & V1 <= 1000, 1, 0) + 
                                cumsum(ifelse(V1 >= 1000, 1, 0)))

更新:將第二條ifelse邏輯語句從row_number()> 1&V1 <1000更改為以上所示。 此更改應提供注釋中要求的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM