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

R 从表中提取具有最后一个数据点的列号,r,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.

我有以下反转的数据帧

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的列,并将列名提取为数字(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日


谢谢

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

col <- max(which(!is.na(t(as.matrix(z))))) %% ncol(z)
if(!col) col <- ncol(z)
names(z)[[col]] 
# [1] "Dec"
您可以尝试
nchar
测试“空单元格”:


您正在寻找类似于
的东西(z=-.5,arr.ind=TRUE)
?你的问题不是很清楚。另外,请注意您所描述的浮点问题。我希望选择最后一个数据点所在的列,并提取列名或其对应的数字作为长度(z)=12,但是没有特定的数字,因为必须将其应用于其他表。我不太理解您的问题。如果@AnandaMahto的答案不是你想要的,也许你可以简单地使用
ncol(z)
?如果问题不清楚,谢谢你的时间和建议。我希望提取与z中最后一个数据点一致的列号,如果可能,不使用数据点-0.50或ncol(z)这恰好是最后一列,与最后一个数据点相同。请
dput
您的数据,以便我们能够准确地了解我们在这里处理的内容。即使最后一个数据点不是12月,您的答案也提供了第12列。@Barnaby,空数据点是
NA
?如果它们是其他内容,这显然不起作用,但如果您提供有关数据内容的更多详细信息(
data.frame
带有字符、列等),则可以进行更新以使其起作用。什么代表空虚?谢谢,忘了读你的底线没有。我可以尝试将NAs用于讨论中的问题。z是一个表,不确定这是否会影响结果,请立即尝试NAs@Barnaby,我知道的唯一数据类型是由
table()
生成的数据类型,它不能与您显示的数据类型相同。当你做str(z)
,你会得到什么?这是一个数据框,我的观点。谢谢你,我能问你转换成矩阵的原因吗z@Barnaby:
nchar
如果使用
data.frame
,则计算每列的字符数。要获得每个单元格的字符数,我将其转换为
矩阵
tail(which(nchar(as.matrix(z)) == 0, arr.ind=TRUE), 1)