我想按时加入两个表。输入文件有一列表示 hh:mm:ss,一列表示 am/pm。我似乎已成功创建了一个带有日期信息的新列,但我无法加入它。错误消息对我来说毫无意义,也没有指向我给出的任何内容。
这:
t1 <- read.table("~/SEQ-1066/sar.r.54043.txt",header=TRUE)
t2 <- read.table("~/SEQ-1066/sar.q.54043.txt",header=TRUE)
t1$pt <- strptime(paste(t1$time, t1$AM),"%I:%M:%S %p")
t2$pt <- strptime(paste(t2$time, t2$AM),"%I:%M:%S %p")
t <- merge(x=t1,y=t2,by="pt")
结果在:
> t1 <- read.table("~/SEQ-1066/sar.r.54043.txt",header=TRUE)
> t2 <- read.table("~/SEQ-1066/sar.q.54043.txt",header=TRUE)
> t1$pt <- strptime(paste(t1$time, t1$AM),"%I:%M:%S %p")
> t2$pt <- strptime(paste(t2$time, t2$AM),"%I:%M:%S %p")
> t <- merge(x=t1,y=t2,by="pt")
Error in sort.list(bx[m$xi]) : 'x' must be atomic for 'sort.list'
Have you called 'sort' on a list?
谢谢R提供如此易于理解的错误消息。
显然,strptime
的数据类型不可排序或用作连接索引,因此使用 as.POSIXct
进行强制转换是有效的。
t1 <- read.table("~/SEQ-1066/sar.r.54043.txt",header=TRUE)
t2 <- read.table("~/SEQ-1066/sar.q.54043.txt",header=TRUE)
t1$pt <- as.POSIXct(strptime(paste(t1$time, t1$AM),"%I:%M:%S %p"), tz = "GMT")
t2$pt <- as.POSIXct(strptime(paste(t2$time, t2$AM),"%I:%M:%S %p"), tz = "GMT")
t <- merge(x=t1,y=t2,by="pt")
在这里找到了实际的解决方案,谢谢恩里克·达拉祖纳。