亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

dplyr包可以用于條件變異嗎?

dplyr包可以用于條件變異嗎?

蝴蝶刀刀 2019-07-31 15:54:10
dplyr包可以用于條件變異嗎?當突變是有條件的(取決于某些列值的值)時,可以使用mutate嗎?這個例子有助于顯示我的意思。structure(list(a = c(1, 3, 4, 6, 3, 2, 5, 1), b = c(1, 3, 4, 2, 6, 7, 2, 6), c = c(6, 3, 6, 5, 3, 6, 5, 3), d = c(6, 2, 4, 5, 3, 7, 2, 6), e = c(1, 2, 4, 5, 6, 7, 6, 3), f = c(2, 3, 4, 2, 2, 7, 5, 2)), .Names = c("a", "b", "c", "d", "e", "f"), row.names = c(NA, 8L), class = "data.frame")  a b c d e f1 1 1 6 6 1 22 3 3 3 2 2 33 4 4 6 4 4 44 6 2 5 5 5 25 3 6 3 3 6 26 2 7 6 7 7 77 5 2 5 2 6 58 1 6 3 6 3 2我希望使用dplyr包找到解決我的問題的方法(是的,我知道這不是應該有效的代碼,但我想它的目的很明確)用于創建新列g: library(dplyr) df <- mutate(df,         if (a == 2 | a == 5 | a == 7 | (a == 1 & b == 4)){g = 2},         if (a == 0 | a == 1 | a == 4 | a == 3 |  c == 4) {g = 3})我正在尋找的代碼的結果應該在這個特定的例子中有這個結果:  a b c d e f  g1 1 1 6 6 1 2  32 3 3 3 2 2 3  33 4 4 6 4 4 4  34 6 2 5 5 5 2 NA5 3 6 3 3 6 2 NA6 2 7 6 7 7 7  27 5 2 5 2 6 5  28 1 6 3 6 3 2  3有沒有人知道如何在dplyr中這樣做?這個數據框只是一個例子,我正在處理的數據框要大得多。由于它的速度,我試圖使用dplyr,但也許還有其他更好的方法來處理這個問題?
查看完整描述

3 回答

?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

使用 ifelse

df %>%
  mutate(g = ifelse(a == 2 | a == 5 | a == 7 | (a == 1 & b == 4), 2,
               ifelse(a == 0 | a == 1 | a == 4 | a == 3 |  c == 4, 3, NA)))

添加 - if_else:注意,在dplyr 0.5中有一個if_else定義的函數,所以替代方法是替換ifelseif_else; 但請注意,因為if_elseifelse條件更嚴格(條件的兩條腿必須具有相同的類型)所以NA在這種情況下必須更換NA_real_。

df %>%
  mutate(g = if_else(a == 2 | a == 5 | a == 7 | (a == 1 & b == 4), 2,
               if_else(a == 0 | a == 1 | a == 4 | a == 3 |  c == 4, 3, NA_real_)))

添加 - case_when自發布此問題后,dplyr已添加,case_when因此另一個替代方案是:

df %>% mutate(g = case_when(a == 2 | a == 5 | a == 7 | (a == 1 & b == 4) ~ 2,
                            a == 0 | a == 1 | a == 4 | a == 3 |  c == 4 ~ 3,
                            TRUE ~ NA_real_))


查看完整回答
反對 回復 2019-07-31
  • 3 回答
  • 0 關注
  • 645 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號