【问题标题】:R: Exclude columns with specific conditions in a matrixR:排除矩阵中具有特定条件的列
【发布时间】:2020-12-19 04:06:02
【问题描述】:

我正在尝试根据 R 中的特定条件排除某些列。我的数据是一个包含 5000 行和 1000 列的大矩阵。看起来是这样的:

我想排除每月平​​均观察次数少于 100 次的所有列。我尝试了一个 for 循环,但它返回一个空值。

【问题讨论】:

  • Eli,请提供一种方法让我们重现您的数据,您可以在您的 R 对象上使用 dput() 函数,然后将结果复制并粘贴到这篇文章中。
  • 请使用dput添加数据,而不是图像。还显示相同的预期输出。请阅读有关how to ask a good question 的信息以及如何提供reproducible example。您可以创建一个小示例,其中有 5-8 列,而不是 100 个观察值,我们可以保留只有 3-4 个观察值的列。
  • colSums(is.na()) 将告诉您每列有多少个 NA .. 您使用此布尔值对矩阵进行子集化?例如,[,colSums(is.na())
  • @StupidWolf 非常感谢!效果很好!
  • 太好了。下次尝试像@RonakShah 指出的那样提供您的数据示例。

标签: r matrix na


【解决方案1】:

你应该看看 tibble 的 as_tbble() 和 dplyr 的 select_if() 函数。

类似...

months <- 3

matrix %>% as_tibble() %>% 
select_if(function (col) sum(!is.na(col)) > 100 * months )

见:https://www.rdocumentation.org/packages/dplyr/versions/0.5.0/topics/select_if

【讨论】:

  • 感谢 Daniel Lathrop!我试过了,但它返回以下错误: UseMethod("tbl_vars") 中的错误:没有适用于 'tbl_vars' 的方法应用于类“c('matrix', 'integer', 'numeric')”的对象跨度>
  • 对……这是一个矩阵而不是数据框。我的错。可以将矩阵转换为df吗?我正在编辑我的答案以采用这种方法。
  • 我将其转换为 data.table,但使用该代码 dt %&gt;% select_if(function (cols) sum(!is.na(cols)) &gt; 100 * months ),我得到了 0 行。另外我不明白为什么要为月份赋值。我每个月都有数百行。预期输出是一个矩阵或表格,不包括具有少于 100 个观测值的所有列,即 5000 - 100 个 NA 观测值,但月份的列除外。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-04
  • 2021-08-17
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多