要查找数据帧每一行中最小值的列数,可以使用apply函数,但是如果我们要以表格形式返回输出,则应使用矩阵函数。例如,如果我们有一个数据帧df,则可以使用以下代码解决问题:as.matrix(apply(df,1,which.min))。
请看以下数据帧:
> set.seed(37) > x1<-rpois(20,1) > x2<-rpois(20,3) > x3<-rpois(20,5) > x4<-rpois(20,8) > x5<-rpois(20,3) > df1<-data.frame(x1,x2,x3,x4,x5) > df1
输出结果
x1 x2 x3 x4 x5 1 1 2 4 9 3 2 0 5 8 10 4 3 1 3 8 6 1 4 1 5 5 8 1 5 1 6 7 10 1 6 2 2 3 8 2 7 1 5 1 7 6 8 0 5 3 11 1 9 0 3 7 9 0 10 0 1 7 4 1 11 1 0 4 8 4 12 1 1 6 8 6 13 1 0 5 7 3 14 0 3 4 6 1 15 2 0 5 8 5 16 2 1 1 7 6 17 2 4 1 7 1 18 0 0 4 11 4 19 1 2 6 10 2 20 2 4 14 6 5
查找每行最小值的列数:
> as.matrix(apply(df1,1,which.min))
输出结果
[,1] [1,] 1 [2,] 1 [3,] 1 [4,] 1 [5,] 1 [6,] 1 [7,] 1 [8,] 1 [9,] 1 [10,] 1 [11,] 2 [12,] 1 [13,] 2 [14,] 1 [15,] 2 [16,] 2 [17,] 3 [18,] 1 [19,] 1 [20,] 1
让我们看另一个例子:
> y1<-rnorm(20) > y2<-rnorm(20) > y3<-rnorm(20) > y4<-rnorm(20) > y5<-rnorm(20) > y6<-rnorm(20) > df2<-data.frame(y1,y2,y3,y4,y5,y6) > df2
输出结果
y1 y2 y3 y4 y5 y6 1 0.60626817 -0.91135701 -1.54130303 -0.179728310 -0.11247788 -1.6229564 2 0.19393903 -1.07692650 -0.40583883 0.792882282 -0.24669868 1.2778953 3 1.34801696 1.13319435 -1.52777490 -0.271678353 1.73391148 -0.1999457 4 1.47746318 -2.02080815 0.91405420 0.187589191 -0.13964786 0.5949776 5 0.13006357 -0.12006636 0.07832255 0.245816917 -0.02587037 1.9145620 6 1.15608052 0.78724570 0.21028660 -0.800353797 0.17037962 2.0228097 7 -1.66547295 0.15968512 -0.41067917 1.163657693 -0.80061836 -0.2003318 8 -0.99577105 -0.71316794 0.07191634 -1.587010612 -1.22748045 0.3979554 9 1.52424854 1.08072776 -0.47782945 0.033819730 -1.69111494 -0.3684224 10 -0.64126977 1.68534888 2.39972590 -0.679471637 1.10681706 0.6740395 11 0.17454722 -0.91772017 1.55791731 0.730534135 0.43243721 -0.7367532 12 -0.35585875 -0.06142613 1.59953661 0.336857456 -0.94200575 -1.8501486 13 -1.68668979 -1.07762950 -0.27908596 -0.537678939 0.04321625 0.6898380 14 1.87904655 -1.60792421 1.24671576 1.117086006 -0.58952288 1.6803463 15 -1.44386867 0.78773146 2.74858228 0.132986370 0.77109554 -0.6953031 16 1.12119646 -1.17683926 -0.59541289 0.911623304 1.34332211 -0.8758561 17 -0.05182865 -0.65743777 0.79942253 1.915909217 -2.10284503 0.4708889 18 1.02779621 0.35756128 1.20166249 0.683214669 -0.06237268 -0.7683743 19 0.39594576 -0.08108464 -0.18974225 -0.008500698 0.38907174 -1.2654953 20 -0.57351319 -2.00570145 1.78322840 -0.412478686 0.35721591 -1.3844073
查找每行最小值的列数:
> as.matrix(apply(df2,1,which.min))
输出结果
[,1] [1,] 6 [2,] 2 [3,] 3 [4,] 2 [5,] 2 [6,] 4 [7,] 1 [8,] 4 [9,] 5 [10,] 4 [11,] 2 [12,] 6 [13,] 1 [14,] 2 [15,] 1 [16,] 2 [17,] 5 [18,] 6 [19,] 6 [20,] 2