将周+天(39 + 3)变量更改为R中的周或天

时间:2019-04-08 10:26:58

标签: r

我正在使用以周数+天数(39 + 3)给出的怀孕长度[factor]变量,并且我需要能够使用可以比较各组并计算平均值的整数。因此,是276天(37 * 7 + 3)或37,43周(37+(3/7))。 有什么建议吗?

3 个答案:

答案 0 :(得分:0)

这两个天(整天与小数周)是完全相等的,但您应该选择小数周,因为a)几周容易关联,b)小数周是连续的,整天是离散的,并且是连续数据通常更容易。

答案 1 :(得分:0)

您应该可以使用lubridate来解决这个问题。

假设变量以类似a+b的形式出现,其中a以星期为单位,b以天为单位。

library(lubridate)
s <- "39+3"
s <- gsub("$", "d", gsub("\\+", "W ", s)) #Add W and d to denote Weeks and days
s
[1] "39W 3d"
period(s) #Convert into a period format
[1] "276d 0H 0M 0S"
as.numeric(period(s), "days") #Change that to noofdays
[1] 276

答案 2 :(得分:0)

有些data.table的字段。.

样本数据

library( data.table )
set.seed(123)
DT <- data.table( pregnancy.length = paste0( sample(20:42, 100, replace = TRUE), 
                                             "+",
                                             sample(1:6, 100, replace = TRUE) ), 
                  stringsAsFactors = FALSE )

代码

#first, split the pregnancy-length on the `+`-sign  
DT[, c("weeks", "days") := lapply( tstrsplit( pregnancy.length, "\\+"), as.numeric )]
#then caluculate weeks, days, or both
DT[, `:=`( week.total = weeks + days / 7, day.total = weeks * 7 + days )]

**输出

head(DT)
#    pregnancy.length weeks days week.total day.total
# 1:             26+4    26    4   26.57143       186
# 2:             38+2    38    2   38.28571       268
# 3:             29+3    29    3   29.42857       206
# 4:             40+6    40    6   40.85714       286
# 5:             41+3    41    3   41.42857       290
# 6:             21+6    21    6   21.85714       153