首页 > 解决方案 > 为特定 ID 重新编码列中的观察值

问题描述

我有一个数据集,称为“调查”。在此,我有一行行的个人 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

非常感谢你

标签: rcoding-styledata-cleaningrecode

解决方案


基本上,我们将使用 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)))

推荐阅读