2017-04-05 85 views
1

我想做一個簡單的條件與mutate。SE問題與條件mutate

代碼應該基於來自同一數據框的兩個變量創建一個名爲「性別」的新變量。

sample <- data.frame(
    client = c("john", "peter", "hanna", "lisa"), 
    id = c(100, 400, 650, 700), 
    resident = c('YES', 'YES', 'YES', 'NO')) 

male_index <- as.vector(000:499) 
female_index <- as.vector(500:999) 

sample <- sample %>% 
    mutate(gender = ifelse(resident == "YES" & id %in% male_index, "Male", 
    mutate(gender = ifelse(resident == "YES" & id %in% female_index, "Female", "Female")))) 

我收到以下錯誤,我不明白。我想這與SE有關。但我還是不那麼熟悉R.

錯誤mutate_impl(。數據,點):
說法「數據」丟失,沒有默認值

我不如果我使用單個mutate語句運行代碼,可以獲得任何問題。

+0

請不要混淆R和'dplyr'。 'dplyr'是R統計計算環境可用的數據操作包(附加)。你得到的錯誤是'dplyr'錯誤,而不是R. – lmo

+0

第一個'mutate'有'sample'作爲它的隱式第一個參數(見'help(「%>%」)'),因爲它遵循管道'%>%'。第二個mutate不會立即跟隨管道,所以它缺少第一個參數。嘗試'mutate(。,gender = ....'。它與SE無關,它會抑制錯誤,但我不確定它會更有意義 –

回答

1

您不需要在您的ifelse中撥打第二個mutate電話。

sample <- data.frame(
    client = c("john", "peter", "hanna", "lisa"), 
    id = c(100, 400, 650, 700), 
    resident = c('YES', 'YES', 'YES', 'NO') 
) 

male_index <- as.vector(000:499) 
female_index <- as.vector(500:999) 

sample <- sample %>% 
    mutate(gender = ifelse(
    resident == "YES" & id %in% male_index, 
    "Male", 
    ifelse(resident == "YES" & 
      id %in% female_index, "Female", "Non-resident") 
)) 

現在數據集中的每個人都有一個爲gender分配的值。

sample 
# client id resident gender 
#1 john 100  YES Male 
#2 peter 400  YES Male 
#3 hanna 650  YES Female 
#4 lisa 700  NO Non-resident 
+1

這種方法的問題在於,第四個例子(lisa),非居民,具有性別價值,第二個變異陳述的目的是標記三個值:「男性」,「女性」,「非居民」 – Prometheus

+0

另外,我想要了解錯誤 – Prometheus

+0

我發現了第二個問題,我剛剛在我的答案中編輯了代碼,第二個'ifelse'條件是「女性」,但這和你的第一個條件是一樣的。你是男性嗎?然後說'男',否則你是女性?然後說'女',兩者都不匹配,然後跟'女'一起去。「我把第三種選擇改爲」非居民「,但你可以做到無論你想要什麼 –