首页 > 解决方案 > R:根据另一列中存在的一列值生成一个虚拟变量

问题描述

我有一个这样的数据框:

A                    B          
2012,2013,2014     2011
2012,2013,2014     2012
2012,2013,2014     2013
2012,2013,2014     2014
2012,2013,2014     2015

我想创建一个虚拟变量,表示A列中B列的值是否存在。1表示存在,0表示不存在。这样,

A                    B       dummy        
2012,2013,2014     2011        0
2012,2013,2014     2012        1
2012,2013,2014     2013        1
2012,2013,2014     2014        1
2012,2013,2014     2015        0

我试图用它%in%来实现这一点:

df$dummy <- ifelse(df$B %in% df$A, 1, 0)

但事实证明,列中的所有内容dummy都是1.

当我尝试使用另一种方法时发生了同样的情况any()

df$dummy <- any(df$A==df$B)

列中的所有内容dummy都是TRUE

有没有一种有效的方法来生成这个虚拟变量?

非常感谢!

标签: rif-statementdummy-variableany

解决方案


看起来 columnA是由逗号分隔的数字字符串,因此%in%不合适(例如,如果您B在多个字符串的向量内进行检查,或者如果是数字A,则检查数字会很有帮助B)。如果您的数据框结构不同,请告诉我(并随时编辑您的问题)。

您可能可以通过多种方式完成此操作。也许一种简单的方法是一次使用grepl一行来识别列B是否存在于A.

library(tidyverse)

df %>%
  rowwise() %>%
  mutate(dummy = +grepl(B, A))

输出

# A tibble: 5 x 3
  A              B     dummy
  <fct>          <fct> <int>
1 2012,2013,2014 2011      0
2 2012,2013,2014 2012      1
3 2012,2013,2014 2013      1
4 2012,2013,2014 2014      1
5 2012,2013,2014 2015      0

数据

df <- data.frame(
  A = c(rep("2012,2013,2014", 5)),
  B = c("2011", "2012", "2013", "2014", "2015")
)

推荐阅读