我有一个数据框,其中包含日期列和一些其他值列。我想从数据框中提取那些日期列与预先存在的日期列表中的任何元素匹配的行。例如,使用一个元素列表,日期“2012-01-01”将从数据框中拉出日期为“2012-01-01”的行。
对于数字,我认为我知道如何匹配值。这段代码:
对于数字,我认为我知道如何匹配值。这段代码:
testdf <- data.frame(mydate = seq(as.Date('2012-01-01'),
as.Date('2012-01-10'), by = 'day'),
col1 = 1:10,
col2 = 11:20,
col3 = 21:30)
...生成此数据框:
mydate col1 col2 col3
1 2012-01-01 1 11 21
2 2012-01-02 2 12 22
3 2012-01-03 3 13 23
4 2012-01-04 4 14 24
5 2012-01-05 5 15 25
6 2012-01-06 6 16 26
7 2012-01-07 7 17 27
8 2012-01-08 8 18 28
9 2012-01-09 9 19 29
10 2012-01-10 10 20 30
我可以这样做:
testdf[which(testdf$col3 %in% c('25','29')),]
它将产生这样的结果:
mydate col1 col2 col3
5 2012-01-05 5 15 25
9 2012-01-09 9 19 29
我可以将其推广到像这样的列表:
myvalues <- c('25','29')
testdf[which(testdf$col3 %in% myvalues),]
我得到了相同的输出。因此,我曾认为我可以使用相同的方法处理日期,但事实证明我是错的。下面是我尝试过的代码:
testdf[which(testdf$mydate %in% c('2012-01-05','2012-01-09')),]
得到这个:
[1] mydate col1 col2 col3
<0 rows> (or 0-length row.names)
把日期单独放在一个列表中 - 这是最终的目标 - 也没有帮助。我可以想到通过循环或应用函数来解决这个问题,但对于这种可能是相当普遍的需求,似乎必须有更简单的方法。难道我又忽略了什么简单的东西吗?
问:如何从数据框中选取那些日期列的行,其值与日期列表中的一个匹配?