我有以下数据框
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
谢谢!
答案 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,请使用trunc
或round
或floor
。
修改:您忘了提到您正在使用包zoo
中的功能。如果你没有动物园,那么yearmon对象将表现得像通常的数字 - 你可以使用像floor或trunc这样的函数。
答案 1 :(得分:1)
当我解释这个问题时,你想要一年中的整数吗? 我想完成这个:
CollegeData$TTD=floor(CollegeData$CVC_BA_DEGREE)-CollegeData$FirstYear4C