【问题标题】:Delete an Entire Row/Column if row.names/col.names Contain Characters from row.names/col.names of another dataframe in R and Save如果 row.names/col.names 包含 R 中另一个数据框的 row.names/col.names 中的字符,则删除整个行/列并保存
【发布时间】:2016-05-11 20:43:54
【问题描述】:

我有一个 n x 1 df_vector 向量如下:

Var1:M1 2.5
Var1:M2 3.8
Var1:M3 NaN
Var1:M4 9.3
Var2:M1 0.1
Var2:M2 2.3
Var2:M3 8.8
Var2:M4 NaN

然后我有一个 n x n df_matrix 矩阵:

        Var1:M2 Var1:M3 Var1:M4 Var2:M1 Var2:M2 Var2:M3 Var2:M4
Var1:M1 46900   788888  700000  490603  479063  6468000 649111
Var1:M2 52823   543189  431863  134696  413000  4980000 550690
Var1:M3 34343   543199  543169  413000  479006  4689703 567000
Var1:M4 56655   745893  134000  130000  463090  9806300 790643
Var2:M1 87676   413596  156000  546970  310000  9730000 700000
Var2:M2 67786   124397  134680  546300  146900  1312600 669000
Var2:M3 45332   417933  203333  131588  137900  4690530 978000
Var2:M4 32422   660796  314796  786000  479000  7690000 796080

我想要做的是:如果 df_vector 中的一行具有 NaN 值,则使用其 row.name 并在 df_matrix 中搜索它并完全删除与该名称相同的任何行和/或列df_vector 中有 NaN 值的 row.name。但同时将那些已删除的列/行以相同的顺序保存到新的数据框中。因此,在这个特定示例中,在 df_vector Var1:M3 和 Var2:M4 中具有 NaN 值,因此应完全删除 df_matrix 中名称为 Var1:M3 和 Var2:M4 的行,以及名称为 Var1:M3 和Var2:M4 也应该被完全删除。并且这些删除的行和列应该以与 df_matrix 相同的格式创建一个新的数据框。

实现这一目标的最佳方法是什么?由于我的原始数据集是 10,000 x 10,000 矩阵,所以当我尝试编写 if 和 for 时,它非常慢并且需要很长时间才能编译。

【问题讨论】:

  • 欢迎来到 SO。您能否添加您尝试过的代码,即使它很慢。问题的一般预期格式是,除了描述期望的结果之外,您还展示了您尝试过的内容。

标签: r


【解决方案1】:

我认为避免循环会更快。最简单的方法是分两步完成。

# remove rows and then remove columns
df_matrix[is.nan(df_vector[,1]),] <- NULL
df_matrix <- df_matrix[,!is.nan(df_vector[,1])]

如果列名和行名与两个数据框中的顺序不完全匹配,上述代码可能无法按预期工作。如果是这种情况,则从 df_vector 获取行名并使用 %in% 来保留这些特定的行和列。对于保留已删除数据的第二部分,不清楚您想要什么,因为它基本上是现有 df_matrix 的副本,其中包含一堆不相关的行和列。您希望额外填充单元格中的值是多少?

【讨论】:

  • 这很好用。我试过df_matrix &lt;- df_matrix[,!is.nan(df_vector[,1])]df_matrix &lt;- df_matrix[!is.nan(df_vector[,1]),]。这删除了我想要的行和列。在我的问题的第二部分,我的意思是我想从符合上述条件的这些值中创建一个新的数据框/矩阵,即从从 df_matrix 中删除的行/列中创建一个新的数据框newdf .
猜你喜欢
  • 2015-04-30
  • 2023-01-16
  • 1970-01-01
  • 2020-05-22
  • 2014-08-15
  • 2022-07-20
  • 2018-12-02
  • 2022-01-03
  • 2020-12-17
相关资源
最近更新 更多