[英]Mutate on specific rows in R
我想在評估多行上的突變時改變特定的行,這些行將保留在簡單的filter()
的邊界之外。 我能怎么做?
df <-
data.frame(ID = c(1,1,1,2,2,2,3,3,3),
Date= c(1,2,3,1,2,3,1,2,3),
Money = c(500,400,500,5000,100,100,200,300,300),
Status = c("Good", "Bad", "Good", "Good","Good","Good", "Bad","Good","Good"))
例如,我想在Date==1
處mutate(Money = max(Money))
但同時我不想刪除其他變量或在所有分組日期上執行突變。 有什么辦法嗎? 結果應如下表所示。
result <-
data.frame(ID = c(1,1,1,2,2,2,3,3,3),
Date= c(1,2,3,1,2,3,1,2,3),
Money = c(5000,400,500,5000,100,100,5000,300,300),
Status = c("Good", "Bad", "Good", "Good","Good","Good", "Bad","Good","Good"),
Status_overall = c("Bad", "Bad", "Bad", "Good","Good","Good", "Bad","Bad","Bad"))
也許試試這個。 您可以將最大值存儲在一個新變量中,然后使用條件按組進行變異。 我不知道你的結果中的最后一個變量來自哪里:
library(dplyr)
#Code
new <- df %>% mutate(Val=max(Money)) %>%
group_by(ID) %>% mutate(Money=ifelse(Date==1,Val,Money)) %>%
select(-Val)
輸出:
# A tibble: 9 x 4
# Groups: ID [3]
ID Date Money Status
<dbl> <dbl> <dbl> <fct>
1 1 1 5000 Good
2 1 2 400 Bad
3 1 3 500 Good
4 2 1 5000 Good
5 2 2 100 Good
6 2 3 100 Good
7 3 1 5000 Bad
8 3 2 300 Good
9 3 3 300 Good
也許沒有復雜性的簡單方法可能是( @GregorThomas建議):
#Code2
new <- df %>% mutate(Money=ifelse(Date==1,max(Money),Money))
輸出:
ID Date Money Status
1 1 1 5000 Good
2 1 2 400 Bad
3 1 3 500 Good
4 2 1 5000 Good
5 2 2 100 Good
6 2 3 100 Good
7 3 1 5000 Bad
8 3 2 300 Good
9 3 3 300 Good
我們可以使用case_when
library(dplyr)
df %>%
mutate(Money = case_when(Date == 1 ~ max(Money), TRUE ~ Money))
# ID Date Money Status
#1 1 1 5000 Good
#2 1 2 400 Bad
#3 1 3 500 Good
#4 2 1 5000 Good
#5 2 2 100 Good
#6 2 3 100 Good
#7 3 1 5000 Bad
#8 3 2 300 Good
#9 3 3 300 Good
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.