R 如何将特定的时间字符串转换为数字变量?
我有代表年龄的数据,例如R 如何将特定的时间字符串转换为数字变量?,r,string,R,String,我有代表年龄的数据,例如8y 10m 27d,其中y是年,m是月,d是天 我尝试使用gsub()分别用*365+、*30+和nothing替换y、m和d,然后使用as.numeric(),但R不知道它应该首先计算,所以它只返回NA 有没有办法将这种字符串转换为确切的天数 很抱歉设置了格式,我不记得上次我在这个网站上是什么时候了,所以我忘记了如何设置格式。我们可以使用gsubfn将“y”、“m”、“d”替换为“*365+”、“*30+”和“*1”,并使用eval(parse(. 或者一个更快的选
8y 10m 27d
,其中y
是年,m
是月,d
是天
我尝试使用gsub()
分别用*365+
、*30+
和nothing替换y
、m
和d
,然后使用as.numeric()
,但R不知道它应该首先计算,所以它只返回NA
有没有办法将这种字符串转换为确切的天数
很抱歉设置了格式,我不记得上次我在这个网站上是什么时候了,所以我忘记了如何设置格式。我们可以使用
gsubfn
将“y”、“m”、“d”替换为“*365+”、“*30+”和“*1”,并使用eval(parse(.
或者一个更快的选择是
c(matrix(scan(text=sub(",$", "", gsub("\\D+", ",", str2)), sep=",",
what=numeric(), quiet=TRUE), ncol=3, byrow=TRUE) %*% c(365, 30, 1))
#[1] 3247 3247
更新
如果数据集中有不同的模式,我们可以尝试
str3 <- c(str1, "7m 28d", "5y 10d", "15d", "29d", "8y 15d 10m" )
colSums(sapply(strsplit(str3, "\\s+"), function(x) {
x1 <- as.numeric(sub("\\D+", "", x))
x2 <- sub("\\d+", "", x)
x1[match(c("y", "m", "d"), x2)]}) * c(365, 30, 1), na.rm = TRUE)
#[1] 3247 238 1835 15 29 3235
str3解决方案可能取决于起始日期(因为闰年)
解决方案可以是:
str="8y 10m 27d"
str2=gsub("[A-z]","",str)
str3=as.numeric(strsplit(str2, " ")[[1]])
date1=origin=as.POSIXlt("1990-01-01")
date1$year=date1$year+str3[1]
date1$mon=date1$mon+str3[2]
date1$mday=date1$mday+str3[3]
date1-origin
#[1] Time difference of 3253 days
我如何修改它来处理整个数据集?只需使用for循环或@implicati0n您可以使用sapply(str1,函数(x)eval(parse(text=x)))
我收到一个错误“解析中出错…输入意外结束”. @akrun@implicati0n我尝试了str2@implicati0n您是使用相同的str2
还是原始数据集来表示错误。请检查您的数据集是否有不同的模式等。您可以查看lubridate包,例如。
str1 <- "8y 10m 27d"
str2 <- c(str1, str1)
str="8y 10m 27d"
str2=gsub("[A-z]","",str)
str3=as.numeric(strsplit(str2, " ")[[1]])
date1=origin=as.POSIXlt("1990-01-01")
date1$year=date1$year+str3[1]
date1$mon=date1$mon+str3[2]
date1$mday=date1$mday+str3[3]
date1-origin
#[1] Time difference of 3253 days