R 计算包含特定年份的行数

R 计算包含特定年份的行数,r,dataframe,rowcount,R,Dataframe,Rowcount,我有一个数据框,其中包含这种格式的日期列(1990-02-28) 我想计算包含1996年的行数(与月/日无关) 例如: DF 1. 1946-01-21 -0.7062 2. 1986-01-22 0.5029 3. 1923-01-23 0.5657 4. 1920-01-25 0.4723 5. 1996-01-26 -0.5384 6. 1996-01-27 0.717 答案是2(对于#5,#6) 谢谢你的陈述 DF[ grepl( "1996", DF[ ,

我有一个数据框,其中包含这种格式的日期列(1990-02-28) 我想计算包含1996年的行数(与月/日无关)

例如:

DF

1. 1946-01-21   -0.7062
2. 1986-01-22   0.5029
3. 1923-01-23   0.5657
4. 1920-01-25   0.4723
5. 1996-01-26   -0.5384
6. 1996-01-27   0.717
答案是2(对于#5,#6)


谢谢你的陈述

DF[ grepl( "1996", DF[ , 1 ] ), ]
将实现您的目标:

> DF[ grepl( "1996", DF[ , 1 ] ), ]
      date   value
5 19960126 -0.5384
6 19960127  0.7170
编辑:

行数可以通过

nrow( DF[ grepl( "1996", DF[ , 1 ] ), ] )
或正确使用
length()

length( DF[ grepl( "1996", DF[ , 1 ] ), 1 ] )
以R为基准的其他方式:

df=read.table(text="
19460121 -0.7062
19860122 0.5029
19230123 0.5657
19200125 0.4723
19960126 -0.5384
19960127 0.717")

df$V1=as.character(df$V1)

table(format(as.Date(df$V1,"%Y%m%d"),"%Y"))
#1920 1923 1946 1986 1996 
#   1    1    1    1    2 

table(format(as.Date(df$V1,"%Y%m%d"),"%Y"))["1996"]
#1996 
#   2

仅列操作可能会更快。以下是其中3个:

read.table(stringsAsFactors=FALSE, header=FALSE, text="
19460121 -0.7062
19860122 0.5029
19230123 0.5657
19200125 0.4723
19960126 -0.5384
19960127 0.717") -> xdf

# base R
sum(grepl("^1996", xdf$V1))

# stringi one way
sum(!is.na(stringi::stri_match_first_regex(xdf$V1, "^1996")))

# stringi another way
sum(stringi::stri_count_regex(xdf$V1, "^1996"))

我得到这样的响应:{Error in year(combled$TrdDate):找不到函数“year”},我也尝试了,sum(years(as.Date(combled$TrdDate))==“1996”,na.rm=TRUE)。哪个组合是我的数据帧,TrdDate是我的日期列,谢谢你确定你在使用
lubridate
软件包吗?确保首先使用
install.packages(“lubridate”)
安装它。我认为您使用的
years
命令与您的想法不符。仍然无法识别函数“year”。一定与您使用的其他软件包有冲突。尝试以这种方式使用函数
lubridate::year
。感谢您的响应,因为我需要命令只执行行数,而不执行任何其他输出。考虑到我给出的例子,输出应该是2。@EliadHarell,如果你在发布到SO时学会了一点R,那会有所帮助。你真的不能把@vaettchen的答案用
nrow()
来包装?
length()
提供的是@vaettchen的列数,而不是我做的#rowsThanks Robert。
read.table(stringsAsFactors=FALSE, header=FALSE, text="
19460121 -0.7062
19860122 0.5029
19230123 0.5657
19200125 0.4723
19960126 -0.5384
19960127 0.717") -> xdf

# base R
sum(grepl("^1996", xdf$V1))

# stringi one way
sum(!is.na(stringi::stri_match_first_regex(xdf$V1, "^1996")))

# stringi another way
sum(stringi::stri_count_regex(xdf$V1, "^1996"))