Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用循环查找一组列中的最小非零值_R_Loops - Fatal编程技术网

R 使用循环查找一组列中的最小非零值

R 使用循环查找一组列中的最小非零值,r,loops,R,Loops,假设我有一个数据集 set2_data 在这个数据集中有33列。我的主要目标是在每一列中找到除第一列以外的最低非零值。所以我尝试了以下方法: dade2 <- names(set2_data)[2:33] for (i in 2:33) { print(min(set2_data[dade2[i]])) } 但这是非常低效的,我想知道为什么这是可行的,但上面的循环不行 谢谢大家! 下面是我将尝试使用sapply(通常比for循环快)做的事情 库(tidyverse) ##模拟

假设我有一个数据集

 set2_data  
在这个数据集中有33列。我的主要目标是在每一列中找到除第一列以外的最低非零值。所以我尝试了以下方法:

dade2 <- names(set2_data)[2:33]
for (i in 2:33) {
  print(min(set2_data[dade2[i]]))
}
但这是非常低效的,我想知道为什么这是可行的,但上面的循环不行


谢谢大家!

下面是我将尝试使用sapply(通常比for循环快)做的事情

库(tidyverse)
##模拟数据
种子(3)

x请使您的问题可重现,并包括一些数据以及预期输出。最低非零值不是
>0
,而是
!=0
因为您现在排除了负值。您是有负数还是所有列中的最低正值?没有负数,但如果有负值,我仍然希望它起作用。我改了。谢谢你@PoGibassee the prev。评论谢谢你提到这个@Harrocyankayou真是太棒了。非常感谢你。正是我想要的。
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)]) 
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)