我使用R的min()函数遇到错误。
wip <- read.csv("WIP-01-11-11.csv") # Get WIP CSV
wip <- transform(wip, End.Date=as.Date(wip$End.Date,format='%d-%b-%y', na.rm=T))
wip <- transform(wip, Start.Date=as.Date(wip$Start.Date,format='%d-%b-%y', na.rm=T))
wip2 <- transform(wip, duration=ifelse(
round((wip3$End.Date - wip3$Start.Date)/30, digits = 0)==0,
1,
round((wip3$End.Date - wip3$Start.Date)/30, digits = 0)))
# At this point, I get NAs
wip3 <- transform(wip2, monthsRec=min( (
(2011*12+11) - as.numeric(format(wip3$Start.Date, '%Y'))*12 +
as.numeric(format(wip3$Start.Date, '%m'))),
wip3$duration)
)
当End.Date和Start.Date没有NA时,为什么我在wip2的“持续时间”计算中获得NA。
谢谢,
答案 0 :(得分:1)
wip3 = list()
wip3$Start.Date = as.Date('2011-01-01')
wip3$duration = 10
> min(((2011*12+11) - as.numeric(format(wip3$Start.Date, '%Y'))*12+as.numeric(format(wip3$Start.Date, '%m'))),wip3$duration)
[1] 10
对我来说很好。您的数据中是否有任何NA?如果是这样,您可能希望将na.rm=T
标记用于min()
。
答案 1 :(得分:1)
如果我对wip3$start.Date
使用了错误的大小写,我用@John Colbys示例重现了你的问题:
wip3 = list()
wip3$start.Date = as.Date('2011-01-01')
wip3$duration = 10
min(((2011*12+11) - as.numeric(format(wip3$Start.Date, '%Y'))*12+as.numeric(format(wip3$Start.Date, '%m'))),wip3$duration)
哪个产生
[1] NA
Warning messages:
1: NAs introduced by coercion
2: NAs introduced by coercion
我怀疑你有wip3$duration
,你可能也有wip3$start.Date
- 但你在代码中以wip3$Start.Date
的形式访问了它。返回NULL
,这与其余部分不兼容......