我尝试使用mutate()
创建一个新变量。在df1中,我在col1、col2、col3和col4中有取值范围。我想在df1中创建一个新的二进制变量,该变量为"1"IF在特定的df2列(比如col10)中找到col1 - 4中的任何一个值。
谢谢!
到目前为止,我已经尝试过这种方法,但我不认为它会为所有匹配的值返回值"1",只会为其中一些值返回值"1"。
df1 %>%
mutate(newvar = case_when(
col1 == df2$col10 | col2 == df2$col10 | col3 == df2$col10 | col4 == df2$col10 ~ 1
))
2条答案
按热度按时间ruarlubt1#
这里我们可以使用
if_any
,如果行数相同,则使用==
代替%in%
进行元素间比较zqdjd7g92#
首先,让我们创建一些虚拟数据。
df1
有4列,df2
有一个名为col10
的列。在虚拟数据中,第1、2、3和5行在df2$col10
中有匹配项。我们可以使用
rowwise()
在每一行中进行计算,然后使用c_across()
来识别感兴趣的变量,代码识别四列中的值是否在df2$col10
中,并返回一个逻辑值,as.numeric()
将该逻辑值转换为0(FALSE
)和1(TRUE
)。由reprex package(v2.0.1)于2023年2月9日创建