gpt4 book ai didi

R:根据一列值在另一列中的存在性生成虚拟变量

转载 作者:行者123 更新时间:2023-12-01 02:30:22 26 4
gpt4 key购买 nike

我有一个像这样的数据框:

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

我想创建一个虚拟变量,表示B列中的值是否存在于A列中。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

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

非常感谢!

最佳答案

看起来列 A 是一串用逗号分隔的数字,因此 %in% 不合适(例如,如果您检查多个字符串向量中的 B 或数字(如果 AB 是数字)。如果您的数据框架结构不同,请告诉我(并随时编辑您的问题)。

您可能可以通过多种方式来完成此任务。也许一种简单的方法是使用 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")
)

关于R:根据一列值在另一列中的存在性生成虚拟变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60133014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com