繁体   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