Использование цикла для поиска наименьшего ненулевого значения в наборе столбцов - PullRequest
0 голосов
/ 18 декабря 2018

Предположим, у меня есть набор данных

 set2_data  

, и в этом наборе данных есть 33 столбца.Моя главная цель - найти самое низкое ненулевое значение в каждом столбце, кроме первого.поэтому я пробовал следующие методы:

dade2 <- names(set2_data)[2:33]
for (i in 2:33) {
  print(min(set2_data[dade2[i]]))
}

Приведенный выше код работал, но он включает 0. Итак, я попробовал это:

dade2 <- names(set2_data)[2:33]
for (i in 2:33) {
  print(min(set2_data[dade2[i]][which(set2_data[dade2[i]]>0)]))
}

Если я хочу определить значения индивидуальноЯ могу использовать это:

min(set2_data[,1][which(set2_data[,1]!=0)]) 

, но это ужасно неэффективно, и мне интересно, почему это работает, а цикл выше нет?

Спасибо!

1 Ответ

0 голосов
/ 18 декабря 2018

Вот что я хотел бы сделать, используя sapply (обычно быстрее, чем цикл for)

library(tidyverse)

##Mock data
set.seed(3)
x <- bind_cols(lapply(1:33, function(i)rnorm(1000,mean = 1,sd = 2)))

##Apply the function to each column: 
##First, subset the non-zero elements, then find the smallest one
vector_of_mins <- sapply(x[,2:33], function(i)min(i[i!=0]))

##Similar example with only positive numbers
my_vector <- c(0,1,1.5,2,3,4,5) ##Smallest number should be zero

min(my_vector[my_vector!=0]) ##Retrieves the smallest non-zero (1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...