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)