簡體   English   中英

R. 根據條件改變新變量

[英]R. mutate new variable based on conditions

我有一個包含三個變量(v1、v2 和 v3)的數據框 (zz)。 我想根據某些條件改變一個新變量 v4。

  1. 如果 v3 <= 1 那么 v4=(v1+v2)/2....平均值。
  2. 如果 v3 > 1,則 v4 = V1 或 V2,以較大者為准。
  3. 如果 v1 或 v2 中的任何一個是 NA,則 v4 是非 NA 變量的值。
  4. 如果 v1 和 v2 都是 NA 那么 v4 也是 NA 下面的腳本生成示例數據和我開始解決方案
v1 <- c(4, 4, 4, 4, 3, 5, 6, 7, 2, NA )
v2 <- c(6, 2, 3, 3, 4, 4, 5, 7, NA, 4)
v3 <- c(2, 2, 1, 1, 1, 2, 1, 0, NA, NA)
zz <- data.frame(v1, v2, v3)

zz = mutate(zz, v4 = ifelse( v3<=1, (v1+v2)/2,
                     ifelse( ?????)

任何指導都會有所幫助

您可以使用case_when來指定條件。 條件 3 和 4 可以使用coalesce組合。

library(dplyr)

zz %>%
  mutate(v4 = case_when(v3 <= 1 ~ (v1 + v2)/2, 
                        v3 > 1 ~ pmax(v1, v2), 
                        TRUE ~ coalesce(v1, v2)))
#   v1 v2 v3  v4
#1   4  6  2 6.0
#2   4  2  2 4.0
#3   4  3  1 3.5
#4   4  3  1 3.5
#5   3  4  1 3.5
#6   5  4  2 5.0
#7   6  5  1 5.5
#8   7  7  0 7.0
#9   2 NA NA 2.0
#10 NA  4 NA 4.0


你可以試試

mutate(zz,
  v4 = ifelse(v3 <= 1,
    rowMeans(cbind(v1, v2), na.rm = TRUE),
    pmax(v1, v2, na.rm = TRUE)
  )
)

暫無
暫無

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

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