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

时间:2017-12-28 09:51:52

标签: r loops

我的数据框名为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)
  }
}

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

1 个答案:

答案 0 :(得分: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))