【发布时间】:2019-10-03 05:08:31
【问题描述】:
我有一个数据框,其中有一列表示称为 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 向导。任何帮助表示赞赏。谢谢
【问题讨论】:
标签: r string function dataframe gsub