我的数据框名为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)
}
}
对于这位新手的苛刻建议,我将不胜感激。
答案 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_index
和col_index
对数据框进行子集设置会为您提供一个数据框,其中行和出现负值的列将被删除。可重复的示例数据:
set.seed(171228)
d <- data.frame(matrix(rnorm(1e4, mean = 3), ncol = 20))