我正在调查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("", "")))
答案 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"
说明:
apply(df, 1, which.max)
会在每行(1
)中返回第一次出现which.max
(通过apply(..., 1, ...)
)的列号。
我在这里使用which.max
,每行只包含0
s和1
s以及普通0 < 1
。顺便说一下,如果某一行中没有1
,它就不会工作。
这些列号用于检索日期(通过colnames
)。