[英]dplyr mutate in R - adding a new column depending on sequence of another column
[英]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.