从表中提取具有最后一个数据点的列号

时间:2014-02-11 18:01:25

标签: r

我有以下反转数据框

z
      Jan   Feb    Mar   Apr   May   Jun    Jul    Aug   Sep   Oct   Nov    Dec
14                     -8.70  0.28 18.66   4.81 -34.33 40.39  3.09  7.89  49.41
13  -6.10  9.51  -1.09 -0.01  7.89 -7.37  -0.61  -9.79 31.75 40.67  5.41 -10.53
12  -5.21  7.49  -7.92  3.54 11.19 -6.66  23.64  13.21  9.64 14.44 59.95 -20.96
11 -12.68 11.04 -11.10 -6.18 -5.61  8.93  94.99  30.15 14.37 31.08 -9.02 -14.77
10   5.07 -2.04  22.77 12.05  0.38 -3.28  -2.73  11.26  5.30  4.61 13.80   3.68
9   -0.82  0.86   3.18  1.06  6.47  1.57   2.25  -9.34  5.27  7.25  2.85   0.42
8   10.48  1.17  10.97 -0.13  0.32 -5.89  -2.26  -7.28 -1.39  3.35 14.81   3.40
7   -5.22  3.09  -7.75 -3.41 -0.09 12.37 -17.38   1.41  8.57 10.48 -1.20   7.45
6   13.85  7.22   3.14 -2.92 -7.12  0.45   3.51  -2.30  7.07 -2.83 -2.27  -1.52
5   -0.57  0.58  -2.59  3.29 -6.07  0.37   1.32  -0.58  4.07 -4.85 -0.48   1.66
4    0.46 -0.41   3.01  0.60  2.20 -2.39   0.22   3.99  5.50 16.07 -4.51   0.50
3    1.28  5.10  -3.61  5.02  3.04 -4.05  -2.64   1.88 -2.44  3.27 -2.71   2.02
2   -1.28  0.99   2.38  0.16  1.03 10.93   5.07   0.26  0.84 -0.05 -0.88  -3.71
1    2.33 -1.71  -0.41 -0.58 -2.19  1.26   1.88  -4.03  0.54  0.34  0.22  -0.50

我想找出哪个列在本例-0.50中有最后一个数据点,并在这种情况下提取列名称Dec作为数字(12),不使用-0.50数据点,尝试使用以下错误表达

which( colnames(z)==-0.50)
integer(0)
which( colnames(z)==z[length(z)])
integer(0)

第二个例子

      Jan   Feb    Mar   Apr   May   Jun   Jul   Aug   Sep    Oct   Nov   Dec
18                                                         -12.97  9.96  8.14
17   1.50  3.27   7.38 -1.63  8.53  2.97  1.51 10.99  4.51  -5.70  1.15  9.50
16  -1.38  3.61  -3.98 10.51 -8.39  5.29 -2.01 -3.47 -0.17  -6.20 13.93  9.04
15  -3.96  1.72  -3.28  2.06 -0.26 -1.27 -4.58  3.23 -7.76   2.09  7.33 16.81
14   4.38  0.56   7.09 -5.31 -2.61 -2.66  0.66  0.56  4.64  13.75 -7.10 -5.15
13 -10.13 -6.04  12.62 -3.76 -3.96  7.95  4.71  6.04  7.63  -7.96 -0.69 14.16
12   5.95 11.95 -10.80  2.45 10.19 -5.20 -0.68  0.62  0.26   4.72 -2.48 10.27
11   2.72 11.56  -0.80 -8.62  0.28 -2.96  1.33  3.09  5.14   4.03  6.37 -0.19
10  -5.38  6.58   4.64 -4.21  6.62  3.13 -1.85  7.63 -6.17  -2.95  7.32 -4.37
9    4.20 -2.58   4.01  5.66 -2.94 -1.17 -0.47  4.54 -1.10   1.48  3.24  2.14
8    3.86 -5.93  -3.95  6.46  5.05  1.91 -1.18 -0.88  6.99   2.52  2.42  0.24
7    3.85  7.95  -0.66 -0.99  1.99  5.06 -4.63 -3.00 -0.41   3.73  4.97  2.10
6    0.99 -0.21  -1.64 -3.01 -2.03 -1.26 -1.52  0.32  2.85  -1.59  5.12 -2.45
5   -2.64  2.33   4.91  1.75 -1.01  1.47 -2.78  4.78  0.94   2.51 -2.01  3.75
4    0.08  1.51   0.25  3.00 -2.16 -2.51  4.59  1.43  0.16  -2.59  0.97  1.65
3    0.63 -0.83  -0.68  0.12 -0.22 -3.17  4.41 -1.29 -2.18  -2.54  1.00  1.36
2    2.51  0.17   2.66  3.41 -2.40 -1.77 -0.63 -3.80  3.47   3.20  2.20  0.37
1   -2.37

最后一点是1月-2.37

谢谢

2 个答案:

答案 0 :(得分:1)

col <- max(which(!is.na(t(as.matrix(z))))) %% ncol(z)
if(!col) col <- ncol(z)
names(z)[[col]] 
# [1] "Dec"

这假定“空”值为NA,z是数据帧。我通过从末尾删除一些值来测试它,它也起作用。

答案 1 :(得分:1)

我的答案基于@ BrodieG的答案。

您可以尝试nchar来测试“空单元格”:

tail(which(nchar(as.matrix(z)) == 0, arr.ind=TRUE), 1)