我有一个数据框,其中有一列表示称为 num_days 的天数,为“0”、“”、“0xY0xM”、“0xM”,我想将其更改为天数。
这就是数据框的样子
| a | b | num_days | d |
| 2 | 3 | '01Y' | 99 |
| 2 | 4 | "" | 8 |
| 3 | 7 | "01Y02M" | 7 |
| 4 | 1 | "0" | 8 |
每年Y代表365天,每月代表30天
| a | b | num_days | d |
| 2 | 3 | 365 | 99 |
| 2 | 4 | 0 | 8 |
| 3 | 7 | 425 | 7 |
| 4 | 1 | 0 | 8 |
目前这是解决方案:
return_days <- function(x){
if(x == ""){
return(0)
}
d = gsub("Y", ".", x=x, ignore.case=FALSE, fixed=TRUE)
d = gsub("M", "" , x=d, ignore.case=FALSE, fixed=TRUE)
d = strsplit(d, '[.]')
return( ifelse(length(d[[1]]) == 1, 30*as.numeric(x[[1]][1]), 30* as.numeric(d[[1]][1]) + 365*as.numeric(d[[1]][2]) ) )
}
我确信这可以写得更好,不幸的是我还不是 R 向导。任何帮助表示赞赏。谢谢
最佳答案
这是使用 eval
和 sub
的基本 R 方法。我们可以尝试将 Y
替换为 *365
,将 M
替换为 *30
。这会生成文字算术表达式,其值为天数。然后,我们可以使用 eval()
来计算该表达式。
input <- "01Y02M"
input <- sub("Y", "*365+", input)
input <- sub("M", "*30+", input)
input <- sub("\\+$", "", input)
input
eval(parse(text=input))
[1] "01*365+02*30"
[1] 425
关于r - 将日期字符串转换为 R 中的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56159785/