[英]Count number of entries in a row based on external criteria
我有以下数据框:
Date1 Date2 Date3 Date4 Date5
1 25 April 2005 10 May 2006 28 March 2007 14 November 2007 1 April 2008
2 25 April 2005 10 May 2006 28 March 2007 14 November 2007 1 April 2008
3 29 January 2008 4 December 2008 6 April 2009 1 March 2010 NA
4 29 January 2008 4 December 2008 6 April 2009 1 March 2010 1 February 2010
5 29 January 2008 4 December 2008 6 April 2009 1 March 2010 1 February 2010
6 29 January 2008 4 December 2008 6 April 2009 NA NA
以及以下向量:
1 01/09/2004
2 20/03/2007
3 16/09/2009
4 16/09/2009
5 15/07/2008
6 16/09/2009
我想对数据框每一行中的日期进行计数,这些日期与向量中的日期相同或在日期之前。 例如,对于第一行,计数应为零,因为所有日期都在向量中的相应日期之后。
有人知道该怎么做吗?
这是dput()命令的输出,因此你们可以更轻松地将数据读入R进行测试(如果需要):
数据帧:
structure(c(" 25 April 2005 ", " 25 April 2005 ", " 29 January 2008 ",
" 29 January 2008 ", " 29 January 2008 ", " 29 January 2008 ",
" 10 May 2006 ", " 10 May 2006 ", " 4 December 2008 ", " 4 December 2008 ",
" 4 December 2008 ", " 4 December 2008 ", " 28 March 2007 ",
" 28 March 2007 ", " 6 April 2009 ", " 6 April 2009 ", " 6 April 2009 ",
" 6 April 2009 ", " 14 November 2007 ", " 14 November 2007 ",
" 1 March 2010 ", " 1 March 2010 ", " 1 March 2010 ", " 1 March 2010 ",
" 1 April 2008 ", " 1 April 2008 ", " 1 February 2010 ", " 1 February 2010 ",
" 1 February 2010 ", " 1 February 2010 "), .Dim = c(6L, 5L), .Dimnames = list(
c("1", "2", "3", "4", "5", "6"), c("Rep1", "Rep2", "Rep3",
"Rep4", "Rep5")))
向量:
c("01/09/2004", "20/03/2007", "16/09/2009", "16/09/2009", "15/07/2008",
"16/09/2009")
如果data.frame被称为m
和向量v
,则简单
rowSums(m<=v)
应该这样做(这是可行的,因为m
由R表示为紧随其后的列的矢量,并且v
将被回收)。 不过,首先请确保所有日期均为POSIXct
或Date
; 有关此转换本身的信息,请参见此问题 。
第一件事:您真的必须将所有内容都转换为日期,这可能有点棘手。 我读入矩阵为Data,向量读为vect。 然后 :
vect <- as.Date(vect,format="%d/%m/%Y")
# Due to the apart nature of the Date class, the normal apply-solutions
# don't give the result you're looking for.
Data <- as.data.frame(Data)
for (i in 1:ncol(Data)){
Data[,i] <- as.Date(Data[,i],format="%d %B %Y")
}
> apply(Data,2,"<=",vect)
Rep1 Rep2 Rep3 Rep4
[1,] FALSE FALSE FALSE FALSE
[2,] TRUE TRUE FALSE FALSE
[3,] TRUE TRUE TRUE FALSE
[4,] TRUE TRUE TRUE FALSE
[5,] TRUE FALSE FALSE FALSE
[6,] TRUE TRUE TRUE FALSE
> rowSums(apply(Data,2,"<=",vect))
[1] 0 2 3 3 1 3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.