我在 ifelse 语句中使用带有因子变量的 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,则创建一个虚拟变量(测试),则为 1。所有其他变量将为 0。
我不断收到此警告: “参数‘pattern’的长度 > 1 并且仅使用第一个元素”的意思是,z7 中仅考虑 0 而不是 0:4。
因此,如果是“123”或“246”,则不会计算它们,因为它不是以 0 开头。但如果是“014”或“056”,则它会计算在内。我需要它来计算包含 0 到 4 中任何数字的所有序列,而不仅仅是以 0 开头的序列。
如果字符串中包含这些值(0、1、2、3、4)中的任何一个,则将创建一个等于 1 的虚拟值。
最佳答案
在 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
关于r - 参数 'pattern' 的长度 > 1 并且只有第一个元素将使用数字 grepl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53889688/