簡體   English   中英

在dplyr :: mutate中使用條件

[英]Using conditions in dplyr::mutate

我正在使用大型數據框。 我正在嘗試根據兩個當前向量中存在的條件創建一個新向量。

鑒於數據集的大小(及其一般的真棒)我試圖找到使用dplyr的解決方案,這導致我變異。 我覺得我並不遙遠,但我只是無法找到堅持不懈的解決方案。

我的數據框類似於:

   ID  X  Y
1   1 10 12
2   2 10 NA
3   3 11 NA
4   4 10 12
5   5 11 NA
6   6 NA NA
7   7 NA NA
8   8 11 NA
9   9 10 12
10 10 11 NA

要重新創建它:

ID <- c(1:10)
X <- c(10, 10, 11, 10, 11, NA, NA, 11, 10, 11)
Y <- c(12, NA, NA, 12, NA, NA, NA, NA, 12, NA)

我正在尋找從現有數據創建一個新的矢量'Z'。 如果Y> X,那么我希望它從Y返回值。如果Y是NA,那么我希望它返回X值。 如果兩者都是NA,那么它應該返回NA。

到目前為止,我嘗試使用下面的代碼讓我創建一個滿足第一個條件但不是第二個條件的新向量。

newData <- data %>% 
        mutate(Z =
               ifelse(Y > X, Y,
               ifelse(is.na(Y), X, NA)))

> newData
   ID  X  Y  Z
1   1 10 12 12
2   2 10 NA NA
3   3 11 NA NA
4   4 10 12 12
5   5 11 NA NA
6   6 NA NA NA
7   7 NA NA NA
8   8 11 NA NA
9   9 10 12 12
10 10 11 NA NA

我覺得我錯過了一些簡單的事情。 可以指出我正確的方向嗎?

pmax(, na.rm=TRUE)就是你要找的

data <- data_frame(ID = c(1:10),
           X = c(10, 10, 11, 10, 11, NA, NA, 11, 10, 11),
           Y = c(12, NA, NA, 12, NA, NA, NA, NA, 12, NA))  
data %>% mutate(Z = pmax(X, Y, na.rm=TRUE))
#   ID  X  Y  Z
#1   1 10 12 12
#2   2 10 NA 10
#3   3 11 NA 11
#4   4 10 12 12
#5   5 11 NA 11
#6   6 NA NA NA
#7   7 NA NA NA
#8   8 11 NA 11
#9   9 10 12 12
#10 10 11 NA 11

ifelse代碼可以是

data %>%
       mutate(Z= ifelse(Y>X & !is.na(Y), Y, X))
#   ID  X  Y  Z
#1   1 10 12 12
#2   2 10 NA 10
#3   3 11 NA 11
#4   4 10 12 12
#5   5 11 NA 11
#6   6 NA NA NA
#7   7 NA NA NA
#8   8 11 NA 11
#9   9 10 12 12
#10 10 11 NA 11

暫無
暫無

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

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