如何删除包含负值的每一行和列

问题描述 投票:0回答:1

我有一个名为lexico的数据帧,其维度为11293x512。

如果该列或行中的任何元素保持负值,我想清除每一行和每列。

我怎么能这样做?

以下是我尝试的代码,但由于它具有嵌套循环结构,因此运行时间太长。

(我即将首先得到每个包含负值的列号)

colneg <- c()

for(i in 1:11293){
  for(j in 1:512){
    if(as.numeric(as.character(lexico[1283,2]))< 0)
      colneg <- c(colneg, j)
  }
}

对于这位新手的苛刻建议,我将不胜感激。

r loops
1个回答
1
投票

可能的解决方案:

# create an index of columns with negative values
col_index <- !colSums(d < 0)

# create an index of rows with negative values
row_index <- !rowSums(d < 0)

# subset the dataframe with the two indexes
d2 <- d[row_index, col_index]

这是做什么的:

  • colSums(d < 0)给出了列中负值数量的数值向量。
  • 通过使用!对其进行否定,可以创建一个逻辑向量,其中没有负值的列获得TRUE值。
  • 对于行,它的工作原理相同。
  • 使用row_indexcol_index对数据框进行子集化可以为您提供一个数据框,其中删除了行以及出现负值的列。

可重复的示例数据:

set.seed(171228)
d <- data.frame(matrix(rnorm(1e4, mean = 3), ncol = 20))
© www.soinside.com 2019 - 2024. All rights reserved.