R中的NA错误最小功能

时间:2011-11-09 01:07:42

标签: r

我使用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。

谢谢,

2 个答案:

答案 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,这与其余部分不兼容......