【问题标题】:Recode observation in column for a specific ID为特定 ID 重新编码列中的观察值
【发布时间】:2020-06-22 16:09:00
【问题描述】:

我有一个名为“调查”的数据集。在此,我有一行行的个人 ID,以及包含许多问题的列。我需要将 1 列中的值重新编码为 NA 并将观察结果移至另一列。

例如:

ID    Fruit    Vegetable
aaa   NA       grape 
bbb   NA       tomato
ccc   apple    NA
ddd   peach    NA

我想更改葡萄和番茄的观察,属于 ID aaa 和 bbb 以将它们放入水果列​​(调查受访者将它们放入错误的列)并将 NA 留在后面。

看起来像:

ID    Fruit    Vegetable
aaa   grape    NA 
bbb   tomato   NA
ccc   apple    NA
ddd   peach    NA

非常感谢

【问题讨论】:

    标签: r coding-style data-cleaning recode


    【解决方案1】:

    基本上,我们将使用 2 个条件来完成此操作。第一个将检查它是否为 NA 并在您要重新编码的名称列表中 (fct2recode)。如果它在 fct2recode 中,第二个将从第二列中删除它。

    library(tidyverse)
    
    df <- read_table("ID    Fruit    Vegetable
    aaa   NA       grape 
    bbb   NA       tomato
    ccc   apple    NA
    ddd   peach    NA")
    
    fct2recode <- c("grape", "tomato")
    
    df %>%
        mutate(Fruit = ifelse(is.na(Fruit) & Vegetable %in% fct2recode, 
                              Vegetable, Fruit),
               Vegetable = ifelse(Vegetable %in% fct2recode, NA, Vegetable))
    

    结果:

    # A tibble: 4 x 3
      ID    Fruit  Vegetable
      <chr> <chr>  <chr>    
    1 aaa   grape  NA       
    2 bbb   tomato NA       
    3 ccc   apple  NA       
    4 ddd   peach  NA   
    

    我希望这种方法对您的问题足够通用。

    编辑:

    对于ID为“aaa”和“bbb”的特定目标obs,您可以将它们作为条件添加到ifelse

    df %>%
        mutate(Fruit = ifelse(ID %in% c("aaa", "bbb"), Vegetable, Fruit),
               Vegetable = ifelse(ID %in% c("aaa", "bbb", NA, Vegetable)))
    

    【讨论】:

    • 这非常有用,非常感谢!但是,我不希望对所有 NA 进行重新编码,只对 ID aaa 和 bbb 行中的那些进行重新编码
    • 哦,其实更简单。给我2秒
    • 添加到答案中;)
    • 非常感谢!我收到一条错误消息:Error in ifelse(survey$ResponseId %in% c("R_3mlqtfm3LpXDrYe", "R_1KcY8uAIKT9GaB3", : argument "yes" is missing, with no default
    • 我试过了:survey &lt;- survey %&gt;% mutate( Fruit = as_factor(if_else(is.na(Fruit) &amp; Vegetable == "grape", "grape", as.character(Fruit))), Vegetable = if_else(Fruit == "grape" &amp; Vegetable == "grape", NA_character_, Vegetable) ) 此代码运行,没有错误。但是当我做一张桌子时,它仍然像以前一样出现
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多