0

我有以下数据框

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-1999 年 6 月 = 4 年,第二个是 NA - 2000=NA

谢谢!

4

2 回答 2

2

好吧,由于您将 CVC_BA_DEGREE 作为 yearmon 而将 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,请使用truncorroundfloor

编辑:你忘了提到你正在使用 package 中的函数zoo。如果您没有 zoo,那么 yearmon 对象的行为将与通常的数字一样 - 您可以对它们使用 floor 或 trunc 等函数。

于 2013-09-19T19:53:01.937 回答
1

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

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

于 2013-09-19T19:48:44.983 回答