两个约会之间的时间?数字为年

时间:2013-09-19 19:32:33

标签: r

我有以下数据框

CollegeData<-structure(list(PUBID = c(1, 2, 3, 4, 6, 8, 9, 10, 11, 12), CVC_BA_DEGREE = structure(c(2003.41666666667, 
NA, NA, NA, NA, 2003.5, 2005.41666666667, 2004.41666666667, NA, 
NA), class = "yearmon"), FirstYear4C = c(1999, 2000, 2001, 2005, 
2000, 1999, 2000, 2002, 2001, 2002)), .Names = c("PUBID", "CVC_BA_DEGREE", 
"FirstYear4C"), row.names = c(NA, 10L), class = "data.frame")

我想创建一个新列

CollegeData$TTD=CollegeData$CVC_BA_DEGREE-CollegeData$FirstYear4C

其中第一个元素是2003年6月至1999年= 4年,第二个元素是NA - 2000 = NA

谢谢!

2 个答案:

答案 0 :(得分:2)

因为您将CVC_BA_DEGREE作为常量而不是FirstYear4C作为数字,您需要在扣除它们之前使它们具有可比性。

CollegeData$TTD=CollegeData$CVC_BA_DEGREE-CollegeData$FirstYear4C
# won't make sense ... unless you use it without zoo package where yearmon is defined

CollegeData$TTD=as.numeric(CollegeData$CVC_BA_DEGREE)-CollegeData$FirstYear4C
CollegeData$TTD=CollegeData$CVC_BA_DEGREE-as.yearmon(CollegeData$FirstYear4C)
# both lead to the same result 

如果您想要“更短”的结果,即4而不是4.41667,请使用truncroundfloor

修改:您忘了提到您正在使用包zoo中的功能。如果你没有动物园,那么yearmon对象将表现得像通常的数字 - 你可以使用像floor或trunc这样的函数。

答案 1 :(得分:1)

当我解释这个问题时,你想要一年中的整数吗? 我想完成这个:

CollegeData$TTD=floor(CollegeData$CVC_BA_DEGREE)-CollegeData$FirstYear4C