当前位置: 首页 > 知识库问答 >
问题:

参数“pattern”的长度大于1,只有第一个元素将使用数值grepl

翟缪文
2023-03-14

我在 ifelse 语句中使用带有因子变量的 grepl 不断收到此警告:“参数'模式'有长度

我有这些变量: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,它是1,则创建一个虚拟变量(test)。其他的都是0。

我一直收到这个警告:“参数'模式'有长度

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

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

共有1个答案

柳俊健
2023-03-14

格雷普尔

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

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

grepl("[0-4]", c("0", "4", "5", "9"))
# [1]  TRUE  TRUE FALSE FALSE
 类似资料: