【问题标题】:mutate column based on another dataframe根据另一个数据框改变列
【发布时间】:2022-12-18 09:44:56
【问题描述】:

我需要为 70 多个字符变量的大列分配一个数值

当有少数字符变量时,我只是手动进行变异(可能不是最好的方法,但它快速且有效)但这对于 70+ 变量不实用:

mutate(df,gender = ifelse(gender=="Female",0, ifelse(gender=="Male",1, 2))

我认为最好使用第 1 列中的 72 个变量和第 2 列中的数字创建一个新的 df(spec) 以供参考:

speciality Code
a 1
b 2
c 3
d 4
e 5
f 6

...

我现在无法弄清楚如何改变我的数据以交换数字代码的专业。

任何帮助表示赞赏 - 特别是如果我一开始就走错了路

R知识还是比较基础的。我试过了

mutate(df,speciality = ifelse(speciality==spec[,1],spec[,2],0))

但得到一个错误

Error in env_has(env, name, inherit = TRUE) : 
  attempt to use zero-length variable name

【问题讨论】:

    标签: r dplyr recode mutate


    【解决方案1】:

    无需制作另一个数据框;你可以只使用dplyr::recode()

    set.seed(13)
    library(dplyr)
    
    #example data
    df <- data.frame(speciality = sample(letters[1:6], 10, replace = TRUE))
    
       speciality
    1           c
    2           e
    3           b
    4           e
    5           f
    6           f
    7           d
    8           e
    9           d
    10          c
    
    #recode values
    df %>% 
      mutate(speciality = recode(
        speciality, 
        a = 1,
        b = 2,
        c = 3,
        d = 4,
        e = 5,
        f = 6
      ))
    
       speciality
    1           3
    2           5
    3           2
    4           5
    5           6
    6           6
    7           4
    8           5
    9           4
    10          3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 2020-05-23
      相关资源
      最近更新 更多