我有这个例子:
x=c(NA, 2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -2, 2, -14, -15, -16, -17, 2, -19, -20)
g= head(x[!is.na(x)], 13)
我想排除已经用于g的值。
y=x[-(head(x[!is.na(x)], 13))]
Is there a better way to do this?
我收到此错误:
Error in x[-(head(x[!is.na(x)], 13))] :
only 0's may be mixed with negative subscripts
any idea why?
您可以使用%in%
来检查其中g
包含的值,并取反每个包含定义中包含的值的索引g
:
x[!(x %in% (head(x[!is.na(x)], 13))) | (1:length(x)) > which(cumsum(!is.na(x)) == 13)]
发生错误是因为您在的子集中混合了正索引和负索引x
,这是不必要的,因为您不必使用索引,而不必创建逻辑向量来为每个未包含的值提供位置g
。
编辑:我添加了第二个逻辑向量,以确保第13个非NA
值的索引之后的值不能删除,因为它们永远都不会包含在其中g
(因为这g
是NA
x的前13个非值的子集)。可能有一个更简单的解决方案,但是应该这样做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句