【问题标题】:Conditionally removing rows from a matrix in R有条件地从R中的矩阵中删除行
【发布时间】:2019-04-07 04:29:23
【问题描述】:

我正在处理大量数据,但在继续我的工作之前,我想删除一列中值小于 10 的所有行。

我的 data.frame 有两列,每列有 427 行。没有运气,我试过了......

for (i in vals[, 1])    # vals is the name of my data frame
{                       # I want to test the condition on the values in 
                          the first column
    if (i < 10)
    {
        vals <- vals[-i, ]
    }
}

当我运行我的脚本时,我收到一条错误消息:“-i:一元运算符的参数无效”

我不确定它是否会有所不同(我对使用 R 还是很陌生),但我还要补充一点,这个 for 循环嵌套在一个更大的循环中。谢谢!

【问题讨论】:

  • Emily,要摆脱这一点的一点是,R 能够一次有效地处理整个向量。在这种情况下,vals[[1]] &lt; 10 将返回logical 的向量,指示哪些值满足条件。唯一缺少的(并且未在下面的答案中解决)是您的数据中存在NA;我猜any(is.na(vals[,1])) 是假的,但如果它是真的,那么你需要像vals[ !is.na(vals[,1]) &amp; vals[,1] &gt;= 10,] 这样的逻辑。 (@12b345b6b78 ...随意在您的答案中添加该约束,我觉得我在给您添油加醋:-)

标签: r dataframe matrix rows


【解决方案1】:
vals <- vals[vals[, 1] >= 10, ]

【讨论】:

  • 反转逻辑,那些是要删除的行。
  • 我一直在关注您的回复!谢谢你们的帮助:)我仍然有点卡住,因为无论出于何种原因,这只是将第 1 列中的前 12 行识别为 >= 10(它们是)......但大约 1/3其中的值 >= 10,所以我不确定那里发生了什么:(
  • 我那里也没有 NA 值!
  • 您如何查看输出?可以截断吗?您是否以任何方式扩展查询(这可能会在评估您的逻辑后限制匹配行的数量)?
  • 我在控制台中输入表名(so, vals)来查看。我还尝试在控制台中输入“vals[[1]] >= 10”来检查布尔值,即使在那里,只有前 12 个值是 TRUE,其余 415 个值都是 FALSE
猜你喜欢
  • 1970-01-01
  • 2018-10-04
  • 2014-05-04
  • 2015-08-31
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-12
相关资源
最近更新 更多