如何根据出生日期评估R中的十二生肖?

时间:2019-05-10 12:37:38

标签: r database date dataframe

所以我在data.frame中有一个出生日期向量。我想根据这个日期评估哪个星座是被访者。

我已经看到了以下解决方案:

Checking if Date is Between two Dates in R

但是,这种方法意味着我必须为每个星座(开始日期和结束日期)创建12个矢量乘以2,以检查我的出生日期是否介于两者之间。有更有效的方法吗?

这是我的data.frame:

set_item_property('A.PB',DISPLAYED,property_true);

data.frame(respondent = c(1,2,3,4,5), date_of_birth = seq(as.Date("2011-12-30"), as.Date("2012-04-30"), by="months") )

我想得到这个:

  respondent date_of_birth
1          1    2011-12-30
2          2    2012-01-30
3          3    2012-03-01
4          4    2012-03-30
5          5    2012-04-30 

2 个答案:

答案 0 :(得分:0)

我认为* apply函数仅用于这项工作。您可以尝试在fisrt数据帧上使用lapply(更确切地说:使用其date_of_birth列),并根据日期将数据框编入黄道十二宫,以产生向量zodiac,其长度等于数据框的高度。

答案 1 :(得分:0)

这将起作用,并且使用完全填充的十二生肖数据库,这应该非常容易。我的意思是,您需要一个数据库,每年在其中都有不同的日期,因为否则很难比较新年的日期。另外,请确保条件正确,对生肖一无所知。

library(fuzzyjoin)
birth.days <- data.frame(respondent = c(1,2,3,4,5), date_of_birth = seq(as.Date("2011-12-30"), as.Date("2012-04-30"), by="months") )

zodiacs <- data.frame(Zodiac = c("Capricorn")
                      , Start.Date = as.Date("2011-12-22")
                      , End.Date = as.Date("2012-01-20"))

fuzzy_left_join(birth.days, zodiacs, 
               by = c("date_of_birth" = "Start.Date", "date_of_birth" = "End.Date"), 
               match_fun = list(`>=`, `<`))
    respondent date_of_birth    Zodiac Start.Date   End.Date
1          1    2011-12-30 Capricorn 2011-12-22 2012-01-20
2          2    2012-01-30      <NA>       <NA>       <NA>
3          3    2012-03-01      <NA>       <NA>       <NA>
4          4    2012-03-30      <NA>       <NA>       <NA>
5          5    2012-04-30      <NA>       <NA>       <NA>

仅以如何使用日期填充数据库为例:

Capricorn <- data.frame( Start.Date = seq.Date(from= as.Date("1900-12-22"), to = as.Date("2100-01-01"), by = "year")
                         , End.Date = seq.Date(from= as.Date("1901-01-20"), to = as.Date("2100-01-20"), by = "year")
                         , Zodiac = rep("Capricorn", 200 )

)