【问题标题】:conditionally remove elements in a vector有条件地删除向量中的元素
【发布时间】:2014-02-07 14:58:15
【问题描述】:

我有一个名为 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])}
}

错误是:

删除错误(向量[i]): ... 必须包含名称或字符串”。

【问题讨论】:

  • 如果你的向量被称为tmp,就做tmp[-which(nchar(tmp) &lt; 6)]

标签: r vector


【解决方案1】:

首先,您不需要为此使用循环。这会做你想做的事:

Vector &lt;- Vector[nchar(Vector) &gt; 3]

如果您想专门删除“0”,您可以这样做:

Vector &lt;- Vector[Vector != "0"]

错误是因为您在Vector 内的元素上使用remove,而不是在对象上。换句话说,remove 可以从内存中删除所有Vector,但不能删除其中的元素。其他对象也是如此。

【讨论】:

    【解决方案2】:

    如果您以交互方式使用 R(否则不推荐使用 - 请参阅此处:Why is `[` better than `subset`?),您也可以编写:

    subset(Vector, nchar(Vector) >3)
    

    【讨论】:

    • subset() 不应在非交互环境中使用。
    • @TARehman;你的反对票真的没有建设性。 1/问题没有提到它是一个非交互式环境。 2/ 我认为向初学者展示该语言必须提供的不同选项很有帮助。
    • 很好的编辑,考虑到问题的年龄,我有点犹豫,但我想如果我在尝试查找内容时偶然发现它,其他用户也可以。
    猜你喜欢
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 2017-12-15
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多