用r中的ifelse进行突变

时间:2019-11-26 10:09:50

标签: r if-statement dplyr mutate

我正在处理一个数据帧(暗度:10,155 x 33)。数据框的很少行和列是

kfctl delete -f ${CONFIG_FILE}

对于变量age_band,我想使用tidyverse函数split(),mutate()和链接运算符进行以下嵌套操作:

  1. 将age_band分为两列a1和a2
  2. 在a1列中将“ 71+”替换为“ 71”
  3. 将a1和a2列转换为数字类
  4. 创建一个列“ age”,它是a1和a2列的平均值。
  5. 删除列a1和a2

我正在使用以下代码:

  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 

错误:列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 的长度必须为10155(行数)或1,而不是0 。请提出可以采取的措施。 当我在ifelse语句中运行不带'$'的代码时,通常会收到错误找不到对象'a1',而在使用链接运算符和mutate时我们不需要'$'。 对Similar question的讨论无法提供任何有用的解决方案。 我尝试了代码的问题,而问题出在

a1

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

编辑:附加sample data

1 个答案:

答案 0 :(得分:0)

以下代码不会产生任何错误:

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)