参数'pattern'的长度> 1,并且仅第一个元素将使用数字grepl

时间:2018-12-21 19:09:31

标签: r

我一直在ifplse语句中使用带有变量变量的grepl来得到此警告: “参数'pattern'的长度> 1,并且仅使用第一个元素”

我有以下变量:x7和y7。 x7是互斥的字符变量,y7是不互斥的因数变量,因此是一串数字(0到9)。

x7可以以任何字母结尾,但我想限制为等于Z或J。如果等于Z,我希望y7以字符串中的任何这些值结尾(0、1、2、3 ,4)。

这是我写的:

test = ifelse( ( x7 %in% c( "Z" ) & grepl( c( 0 , 1 , 2 , 3 , 4 ) , y7 ) ) | x7 %in% c( "J" ) , 1 , 0 ) 

因此,如果x7是Z且y7是0:4,则创建一个虚拟变量(测试),或者如果x7是J,则创建一个虚拟变量(测试)。其他所有变量均为0。

我不断收到此警告: “参数'pattern'的长度> 1,并且将仅使用第一个元素”的意思是,z7中仅考虑0而不是0:4。

因此,如果它是“ 123”或“ 246”,则不会将它们计算在内,因为它不是以0开头。但是它会计算是“ 014”还是“ 056”。我需要它来计数所有包含数字0到4的序列,而不仅仅是以0开头的序列。

如果这些值(0、1、2、3、4)中的任何一个在字符串中,则将创建一个等于1的虚拟对象。

1 个答案:

答案 0 :(得分:2)

grepl中:

grepl(c(0, 1, 2, 3, 4) , c(1, 2))

第一个参数pattern的长度应为1,在您的情况下,长度应为5。 要匹配0到4之间的数字,您可以执行以下操作:

grepl("[0-4]", c("0", "4", "5", "9"))
# [1]  TRUE  TRUE FALSE FALSE