簡體   English   中英

用r中的ifelse進行突變

[英]Mutate with ifelse in r

我正在處理一個數據幀(暗淡:10,155 x 33)。 數據框的行和列很少

  rg[1:3, 1:4]

  REF_NO children age_band  status
1   2148        1    45-50 Partner
2   8099        1    61-65 Partner
3   6611        3    31-35 Partner


> table(rg_age_band)

  18-21   22-25   26-30   31-35   36-40   41-45   45-50   51-55 
     63     456     927    1061    1134    1112    1359    1052 
  55-60   61-65   65-70     71+ Unknown 
   1047     881     598     410      55 

對於age_band變量,我想使用tidyverse函數split(),mutate()和鏈接運算符進行以下嵌套操作:

  1. 將age_band分為兩列a1和a2
  2. 將a1欄中的“ 71+”替換為“ 71”
  3. 將列a1和a2轉換為數值類
  4. 創建一個列“年齡”,即a1和a2列的平均值
  5. 刪除列a1和a2

我正在使用以下代碼:

library(tidyr); library(dplyr)

rg1=rg %>% 
  separate(age_band, into = c("a1", "a2"), sep="-") %>% 
  mutate(a1 = as.numeric(ifelse(rg$a1=="71+", 71, rg$a1)),
         a2 = as.numeric(a2),
         age = 0.5*(a1+a2)) %>% 
  select(-a1-a2)

Error: Column `a1` must be length 10155 (the number of rows) or one, not 0 

錯誤: a1列的長度必須為10155(行數)或1,而不是0,請建議可以做什么。 當我在ifelse語句中運行不帶'$'的代碼時,通常會遇到找不到錯誤對象'a1'的情況,使用鏈接運算符和mutate時不需要'$'。 關於類似問題的討論無法給出任何有用的解決方案。 我嘗試了代碼的問題,問題是

mutate(a1 = as.numeric(ifelse(rg$a1=="71+", 71, rg$a1))

#is producing warning 
Expected 2 pieces. Missing pieces filled with `NA` in 465 rows```



編輯:附加示例數據

以下代碼不會產生任何錯誤:

rg <- data.frame(REF_NO = c(2148, 8099, 6611), children = c(1,1,3), age_band = c("45-50", "61-65", "71+"))

rg %>% 
  tidyr::separate(age_band, into = c("a1", "a2"), sep="-") %>% 
  mutate(a1 = as.numeric(ifelse(a1=="71+", 71, a1)),
         a2 = as.numeric(a2),
         age = 0.5*(a1+a2)) %>% 
  select(-a1, -a2)

暫無
暫無

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

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