我有一个包含此格式的日期列的数据框(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)
由于
答案 0 :(得分:1)
library(lubridate)
library(dplyr)
dt = read.table(text = "
date value
19460121 -0.7062
19860122 0.5029
19230123 0.5657
19200125 0.4723
19960126 -0.5384
19960127 0.717
", header = T)
dt %>%
mutate(date = ymd(date)) %>% # make this a date column (if it's not already)
filter(year(date) == 1996) %>% # filter rows where the year is 1996
nrow() # count rows
答案 1 :(得分:0)
在基础R中的陈述
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 ] )
答案 2 :(得分:0)
基础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 :(得分:0)
仅列操作可能更快。以下是其中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"))