簡體   English   中英

在 R 中的特定行上進行變異

[英]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==1mutate(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.

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