我想选择2010年拍摄的ID,并在晚些时候重新获取。这里的问题是,我知道2010年没有重新获得的一些ID在人群中存在,因为它们被捕获,例如,在2009年,而不是在2010年,并在2011年再次被看到。我想要选择这些ID 。
我有这个数据集:
structure(list(BANDFINAL = structure(c(6L, 7L, 5L, 1L, 9L, 4L,
2L, 3L, 8L, 10L), .Label = c("JP020", "JP1049", "JP1386", "JP1395/P789",
"JP4762", "SH488_L", "SH714_L", "SH735_L", "SH760_L", "SH765_L"
), class = "factor"), ch = c("000000101010", "000000100000",
"000000000010", "000000010000", "000000011000", "011111110100",
"011101010000", "010110011000", "000000010101", "000000010000"
), y.2003 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), y.2004 = c(0, 0,
0, 0, 0, 1, 1, 1, 0, 0), y.2005 = c(0, 0, 0, 0, 0, 1, 1, 0, 0,
0), y.2006 = c(0, 0, 0, 0, 0, 1, 1, 1, 0, 0), y.2007 = c(0, 0,
0, 0, 0, 1, 0, 1, 0, 0), y.2008 = c(0, 0, 0, 0, 0, 1, 1, 0, 0,
0), y.2009 = c(1, 1, 0, 0, 0, 1, 0, 0, 0, 0), y.2010 = c(0, 0,
0, 1, 1, 1, 1, 1, 1, 1), y.2011 = c(1, 0, 0, 0, 1, 0, 0, 1, 0,
0), y.2012 = c(0, 0, 0, 0, 0, 1, 0, 0, 1, 0), y.2013 = c(1, 0,
1, 0, 0, 0, 0, 0, 0, 0), y.2014 = c(0, 0, 0, 0, 0, 0, 0, 0, 1,
0)), .Names = c("BANDFINAL", "ch", "y.2003", "y.2004", "y.2005",
"y.2006", "y.2007", "y.2008", "y.2009", "y.2010", "y.2011", "y.2012",
"y.2013", "y.2014"), row.names = c(2422L, 2521L, 1306L, 27L,
2543L, 192L, 105L, 184L, 2533L, 2548L), class = "data.frame")
这是结果。
BANDFINAL ch y.2003 y.2004 y.2005 y.2006 y.2007 y.2008 y.2009 y.2010 y.2011 y.2012 y.2013 y.2014
2422 SH488_L 000000101010 0 0 0 0 0 0 1 0 1 0 1 0
2521 SH714_L 000000100000 0 0 0 0 0 0 1 0 0 0 0 0
1306 JP4762 000000000010 0 0 0 0 0 0 0 0 0 0 1 0
27 JP020 000000010000 0 0 0 0 0 0 0 1 0 0 0 0
2543 SH760_L 000000011000 0 0 0 0 0 0 0 1 1 0 0 0
192 JP1395/P789 011111110100 0 1 1 1 1 1 1 1 0 1 0 0
105 JP1049 011101010000 0 1 1 1 0 1 0 1 0 0 0 0
184 JP1386 010110011000 0 1 0 1 1 0 0 1 1 0 0 0
2533 SH735_L 000000010101 0 0 0 0 0 0 0 1 0 1 0 1
2548 SH765_L 000000010000 0 0 0 0 0 0 0 1 0 0 0 0
正如您在此处所看到的,ch是捕获历史记录,其余列是相同的捕获历史记录,但是拆分以查看标题中的年份。最终结果应如下所示:
BANDFINAL ch y.2003 y.2004 y.2005 y.2006 y.2007 y.2008 y.2009 y.2010 y.2011 y.2012 y.2013 y.2014
2422 SH488_L 000000101010 0 0 0 0 0 0 1 0 1 0 1 0
2543 SH760_L 000000011000 0 0 0 0 0 0 0 1 1 0 0 0
192 JP1395/P789 011111110100 0 1 1 1 1 1 1 1 0 1 0 0
184 JP1386 010110011000 0 1 0 1 1 0 0 1 1 0 0 0
2533 SH735_L 000000010101 0 0 0 0 0 0 0 1 0 1 0 1
如您所见,此最后一个数据集的第一个ID是在2009年捕获的,而不是在2010年和2011年。
您知道执行此命令的方法吗?
谢谢,
答案 0 :(得分:3)
基本上您需要的是,在1
之前或之前至少有一个2010
存在,并且在2010年之后至少存在另一个1
。
此代码正是如此:
df[ grepl('1', substr(df$ch,1,8)) & grepl('1', substr(df$ch,9,12)), ]
输出与您需要的相同:
BANDFINAL ch y.2003 y.2004 y.2005 y.2006 y.2007 y.2008 y.2009 y.2010 y.2011 y.2012 y.2013 y.2014
2422 SH488_L 000000101010 0 0 0 0 0 0 1 0 1 0 1 0
2543 SH760_L 000000011000 0 0 0 0 0 0 0 1 1 0 0 0
192 JP1395/P789 011111110100 0 1 1 1 1 1 1 1 0 1 0 0
184 JP1386 010110011000 0 1 0 1 1 0 0 1 1 0 0 0
2533 SH735_L 000000010101 0 0 0 0 0 0 0 1 0 1 0 1
答案 1 :(得分:1)
您可以使用subset()
subset(d, y.2010>0 & rowSums(d[,11:14])>0)
或者如果您想要在2009年捕获的ID:
subset(d, (y.2010>0 | y.2009>0) & rowSums(d[,11:14])>0)
您也可以在apply(d[,11:14]>0, 1, any)
rowSums(d[,11:14])>0