r - 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
。
有没有一种有效的方法来生成这个虚拟变量?
非常感谢!
解决方案
看起来 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")
)
推荐阅读
- python - 保存的 csv 的 pd.to_csv 日期格式不同
- android - Kotlin 协程:为什么不抛出 NetworkOnMainThreadException?
- django - 如何将多个 Raspberry Pi (v3) 连接到 Django 以进行 SPA
- laravel - 如何提高laravel项目在移动端的页面加载速度
- c# - C# 进程是否在从 R 脚本输出读取的字符串中重新转义字符?
- python - python3 utf-8 字符串保存到 utf-8?
- css - 使用 react 以编程方式更改 CSS Stylesteet 初始值
- swift - 如何在if语句外部定义var并在外部使用
- c# - 如何比较两个代表c#中数字的字符串?
- java - Cucumber 不会在 intelliJ 中设置 - 似乎不认识 Gherkin