在特定 ID 的列中重新编码观察

Recode observation in column for a specific ID

我有一个数据集,名为 'survey'。在这里,我有几行个人 ID,以及有很多问题的列。我需要将 1 列中的值重新编码为 NA 并将观察值移至另一列。

例如:

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

我想把ID为aaa和bbb的葡萄和西红柿观察值改成fruit一栏(调查对象放错一栏),把NA留下。

看起来像:

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

非常感谢

基本上,我们将使用 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”的特定目标对象,您可以将它们作为条件添加到ifelse:

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