有条件地删除向量中的元素

5

我有一个字符向量叫做Vector,这是输出结果:

[1] "140222" "140207" "0" "140214" "140228" "140322" "140307" "140419" "140517" "140719" "141018" "150117" "160115"

我希望有条件地删除与其他元素不同的唯一元素,例如这里的0

我尝试了这种方法,但似乎不起作用:

for (i in 1:length(Vector) {
    if (nchar(Vector[i]) <=3) 
    {remove(Vector[i])}
}

错误信息是:

在 remove(Vector[i]) 中出现错误: ... 必须包含名称或字符字符串。


如果你的向量被称为 tmp,只需执行 tmp[-which(nchar(tmp) < 6)] - rawr
2个回答

15

首先,你不需要使用循环来完成这个操作。以下代码可以实现你的需求:

Vector <- Vector[nchar(Vector) > 3]

如果你想要特别删除 "0" ,则可以使用以下代码:

Vector <- Vector[Vector != "0"]

出现错误的原因是你在 Vector 中使用了 remove 来移除一个元素,而不是一个对象。换句话说,remove 可以从内存中移除所有的 Vector,但不能移除其中的元素。其他对象也是如此。


1
如果您正在交互式使用 R(否则不太建议 - 请参见这里:为什么 `[` 比 `subset` 更好?),您也可以编写以下内容:
subset(Vector, nchar(Vector) >3)

在非交互式环境中不应使用subset()函数。 - TARehman
2
@TARehman,你的负评真的没有建设性。1/问题没有提到它是一个非交互式环境。2/我认为向初学者展示语言提供的不同选项是有帮助的。 - nassimhddd
不错的编辑,虽然我对问题的年龄有些犹豫,但我想如果我在寻找某些东西时偶然遇到了它,其他用户也可能会遇到。 - TARehman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接