在存在/不存在表中通过因子检测第一次出现

时间:2014-05-20 19:21:08

标签: r

我正在调查94天内接收器阵列中130个发射器的驻留时间。换句话说,我试图跟踪研究区域中每个发射器的检测时间。我能够创建每日存在/不存在表,该表确定在该时间段内是否记录了每个发射机的任何检测(0 =无检测,1 =检测)。所有130个发射器并非一次全部部署,而是交错到8月21日。发射机的部署日期不同,因为它们的部署随着时间的推移而展开。

问题:使用R代码,我如何识别从该存在/不存在表中检测到每个发射器的第一天?

如果其中任何一项不清楚,请随时提出任何问题。您可以在下面找到我的示例数据集,其中包含5个发射器以及7月到10月的日常存在。

dput(head(t))
structure(c(0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 
1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 
0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 
0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 
1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 
1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 
0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 
1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 
0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 
1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 
1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 
1L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 
1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 
0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 
1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 
1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 
1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 
0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 
0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 
1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 
1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 
0L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 
0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 
0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 
1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 
1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 
0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 
0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 
0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 
1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 0L), .Dim = c(5L, 
95L), .Dimnames = structure(list(c("9335", "9344", "9354", "9364", 
"9374"), c("2013-07-01", "2013-07-02", "2013-07-03", "2013-07-04", 
"2013-07-05", "2013-07-06", "2013-07-07", "2013-07-08", "2013-07-09", 
"2013-07-10", "2013-07-11", "2013-07-12", "2013-07-13", "2013-07-14", 
"2013-07-15", "2013-07-16", "2013-07-17", "2013-07-18", "2013-07-19", 
"2013-07-20", "2013-07-21", "2013-07-22", "2013-07-23", "2013-07-24", 
"2013-07-25", "2013-07-26", "2013-07-27", "2013-07-28", "2013-07-29", 
"2013-07-30", "2013-07-31", "2013-08-01", "2013-08-02", "2013-08-03", 
"2013-08-04", "2013-08-05", "2013-08-06", "2013-08-07", "2013-08-08", 
"2013-08-09", "2013-08-10", "2013-08-11", "2013-08-12", "2013-08-13", 
"2013-08-14", "2013-08-15", "2013-08-16", "2013-08-17", "2013-08-18", 
"2013-08-19", "2013-08-20", "2013-08-21", "2013-08-22", "2013-08-23", 
"2013-08-24", "2013-08-25", "2013-08-26", "2013-08-27", "2013-08-28", 
"2013-08-29", "2013-08-30", "2013-08-31", "2013-09-01", "2013-09-02", 
"2013-09-03", "2013-09-04", "2013-09-05", "2013-09-06", "2013-09-07", 
"2013-09-08", "2013-09-09", "2013-09-10", "2013-09-11", "2013-09-12", 
"2013-09-13", "2013-09-14", "2013-09-15", "2013-09-16", "2013-09-17", 
"2013-09-18", "2013-09-19", "2013-09-20", "2013-09-21", "2013-09-22", 
"2013-09-23", "2013-09-24", "2013-09-25", "2013-09-26", "2013-09-27", 
"2013-09-28", "2013-09-29", "2013-09-30", "2013-10-01", "2013-10-02", 
"2013-10-03")), .Names = c("", "")))

1 个答案:

答案 0 :(得分:2)

如果我理解的话,对于每一行,您都要查找列名称,其中第一个(从左侧)出现1。数据集中的几个第一列如下所示:

       2013-07-01 2013-07-02 2013-07-03 2013-07-04 2013-07-05 
  9335          0          0        *1*          1          1 
  9344          0          0        *1*          1          1 
  9354          0          0        *1*          1          1 
  9364         *1*         1         1           1          1 
  9374         *1*         1         0           0          0 

假设您的数据框名为df,这是一个解决方案:

colnames(df)[apply(df, 1, which.max)]
## [1] "2013-07-03" "2013-07-03" "2013-07-03" "2013-07-01" "2013-07-01"

说明:

  1. apply(df, 1, which.max)会在每行(1)中返回第一次出现which.max(通过apply(..., 1, ...))的列号。 我在这里使用which.max,每行只包含0 s和1 s以及普通0 < 1。顺便说一下,如果某一行中没有1,它就不会工作。

  2. 这些列号用于检索日期(通过colnames)。